Kotlin 是否可以在lambda表达式中检索字符串?

Kotlin 是否可以在lambda表达式中检索字符串?,kotlin,kotlintest,Kotlin,Kotlintest,使用字符串规范编写测试: 是否可以在lambda表达式中检索triangle.stl?您必须自己存储对字符串的引用。差不多 class stl : StringSpec() { init { val spek = "triangle.stl" spek { // use spek in here } } } 看起来StringSpec并没有公开这些信息,但您可以扩展StringSpec来公开这些信息。e、

使用字符串规范编写测试:


是否可以在lambda表达式中检索triangle.stl?

您必须自己存储对字符串的引用。差不多

class stl : StringSpec() {
    init {
        val spek = "triangle.stl"
        spek {
             // use spek in here
        }
    }
}
看起来StringSpec并没有公开这些信息,但您可以扩展StringSpec来公开这些信息。e、 g:

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
    }
}
或者,为了避免函数与exsting String.invoke冲突,您可以使用自己的语法对其进行扩展。e、 g:

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 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
    }
}