Можно ли получить строку в лямбда-выражении?

Написание тестов с использованием String Spec:

class stl : StringSpec() {

    init {

        "triangle.stl" {
             ...
        }
    }
}

Можно ли получить "triangle.stl" в лямбда-выражении?

2 ответа

Решение

Это не похоже StringSpec предоставляет эту информацию, но вы можете расширить StringSpec сделать это. например:

class Spec : StringSpec() {
    init {
        "triangle.stl" { testCase ->
            println(testCase.name)
        }
    }

    operator fun String.invoke(test: (TestCase) -> Unit): TestCase {
        var tc: TestCase? = null
        tc = invoke(fun() { test(tc!!) })
        return tc
    }
}

Или чтобы избежать конфликта функций с существующим String.invoke Вы можете расширить его с помощью собственного синтаксиса. например:

class Spec : StringSpec() {
    init {
        "triangle.stl" testCase {
            println(name)
        }
    }

    infix fun String.testCase(test: TestCase.() -> Unit): TestCase {
        var tc: TestCase? = null
        tc = invoke { test(tc!!) }
        return tc
    }
}

Вы должны будете хранить ссылку на строку самостоятельно. Что-то вроде

class stl : StringSpec() {
    init {
        val spek = "triangle.stl"
        spek {
             // use spek in here
        }
    }
}
Другие вопросы по тегам