我编写了一段代码,然后在出现错误时进行编译。但是当我运行时,它会引发异常(java.lang.NoClassDefFoundError:TesKt $ test $ 1 $ 1)。这是语言错误吗?
private fun test(block:()->Unit) = arrayOf(1).map {
object {
fun print() {
println("Hello print")
block()
}
}
}
fun main(args: Array<String>) {
val array = test{println("Hello main")}
array[0].print()
}
对象声明的kotlin documentaition提及以下内容:
“注意:对象声明不能是局部的(即直接嵌套在函数内部),但可以嵌套到其他对象声明或非内部类中。”
这里您的对象声明嵌套在函数内。
对象声明创建了一个新的作用域,并且来自外部作用域的变量或函数(例如您的块函数)不再可见,因此无法使用。
如果删除对象声明,一切将按预期工作:
private fun test(block:()->Unit) = arrayOf(1).map {
{
println("Hello print")
block()
}
}
fun main(args: Array<String>) {
val array = test{println("Hello main")}
array[0]()
}