我在Kotlin中有以下代码片段。我喜欢这样的代码难题,但是这里的结果对我来说太出乎意料了。有人可以描述我为什么打印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规格:use this with caution, because in some cases it can be called instead
。
当您var a = 2
在中执行操作时class A
,实际上并没有隐藏任何变量。您声明这a
是class的字段,A
默认为2。
当您在类的前面引用变量时,如果存在一个具有该名称的字段,但没有具有该名称的上层变量,则Kotlin将添加一个隐式this
(例如,a
变成this.a
)。因此,外部优先于该字段,并且您必须使用来访问内部。a
this.a
a
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句