在Kotlin REPL中,我试图打印一个不变的值,如下所示:
val a:Int
a = 5
print("Value of a is: ${a}")
当我使用Kotlin(1.2.71)在Android Studio(3.2)中执行上述代码时,会引发错误:
错误:由于可能的重新分配,禁止初始化捕获的成员值
a = 5
^
但是当我在play.kotlinlang.org运行相同的代码部分时,它会成功执行并打印输出。
<iframe src="https://pl.kotl.in/SJC7APVo7"></iframe>
如果我对Kotlin REPL中的可变变量做同样的事情,那很好:
var a:Int
a = 5
print("Value of a is: ${a}")
输出-a的值为:5
那么为什么我在Kotlin REPL中遇到了以上错误,并且还只针对不可变变量?
答案 0 :(得分:0)
不可变变量的属性是只能分配一次。就您而言,编译器不喜欢将不可变变量分配多次的可能性。
因此,这绝对可以工作:
val a:Int = 5
print("Value of a is: ${a}")
关于为什么它在2个地方的行为不同,这取决于周围的代码。如果编译器有一种简单的方法来确保只能将值赋值一次,那么它将允许它。
例如:
val a: Int
if(*condition*) {
a = 5
}
else {
a = 6
}
将被允许,尽管“ a”被分配了2次。