【发布时间】:2020-12-29 13:28:09
【问题描述】:
我在 Kotlin 中有以下代码 sn-p。我喜欢这样的代码难题,但这里的结果对我来说太出乎意料了。谁能描述我为什么它打印1 而不是2?
由于 Java 中禁止使用阴影 - 看起来我完全不明白它在 Kotlin 中是如何工作的。
fun main() {
var a = 1
class A {
var a = 2
fun foo() = a
}
println(A().foo())
}
===========奖金============
有趣的是,当您在类声明之后移动var a = 1 时,以下代码可以正常工作并打印2:
fun main() {
class A {
var a = 2
fun foo() = a
}
var a = 1
println(A().foo())
}
UPD:看起来 Kotlin 突然决定像 C++ 一样玩并且有未定义的行为:D
来自Kotlin spec:use this with caution, because in some cases it can be called instead。
【问题讨论】:
-
对于奖金,我认为您的意思是打印
2,而不是1。