我最近遇到了一种情况,即使我使用 init 块为构造函数分配了一个值,我的标准变量的值也会被默认值替换。
我尝试的是:
class Example(function: Example.() -> Unit) {
init {
function()
}
var name = "default name"
}
// assigning it like this:
val example = Example { name = "new name" }
// print value
print(example.name) // prints "default name"
Run Code Online (Sandbox Code Playgroud)
经过一番挣扎,我发现 init 块的位置很重要。如果我将 init 块放在类的最后一个,它首先使用默认名称初始化名称,然后调用 function() 将值替换为“新名称”。
如果我把它放在第一位,它没有找到名称,并且在初始化属性时将其替换为“默认名称”。
这对我来说很奇怪。谁能解释为什么会这样?