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

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

class stl : StringSpec() { init { "triangle.stl" { ... } } } 

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

Это не похоже на то, что 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 } } 

Или, чтобы избежать конфликтов функций с exsting 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 } } }