此语法出现错误
for (i in 0 until 8) {
for (j in 0 until 8) {
} println()
}
错误是
for不是表达式,此处只允许使用表达式。
但这是有效的
for (i in 0 until 8) {
for (j in 0 until 8) {
}
println()
}
我唯一改变的是调用println()
的位置,我曾经使用过java,所以我认为位置不重要。这里有什么问题吗?
1条答案
按热度按时间igetnqfo1#
我在KotlinPlayground做了一些测试,Kotlin编译器确实不能解析放在同一行上并且没有被
;
除尽的语句。例如,
10 println("")
将产生错误:“Unresolved reference: println
“。注意,10
实际上是表达式,因为表达式是产生单个值的代码块。猜测如下:
真实的的问题是,为什么Kotlin编译器显示特定的错误,即
我相信这与Kotlin编译器的代码解析算法有关。这看起来像是编译器试图将同一行上的多个语句解析为一个表达式。
for
关键字使其立即失败。然而,如果您将for
循环替换为一个真实的表达式,编译器将突出显示println
调用为错误,因为它对于表达式来说是多余的。