我在 Kotlin 中有以下代码片段。我喜欢这样的代码难题,但这里的结果对我来说太出乎意料了。有人可以描述我为什么打印1而不是打印2吗?
由于 Java 中禁止阴影 - 看起来我完全不明白它在 Kotlin 中是如何工作的。
fun main() {
var a = 1
class A {
var a = 2
fun foo() = a
}
println(A().foo())
}
Run Code Online (Sandbox Code Playgroud)
============ 奖金 ============
有趣的是,当您var a = 1在类声明后移动时以下代码工作正常并打印2:
fun main() {
class A {
var a = 2
fun foo() = a
}
var a = 1
println(A().foo())
}
Run Code Online (Sandbox Code Playgroud)
UPD:看起来 Kotlin 突然决定像 C++ 一样玩并且有未定义的行为:D
从科特林规格:use this with caution, …