Kotlin REPL:由于可能的重新分配,禁止初始化捕获的成员值

时间:2018-10-17 08:18:06

标签: android-studio kotlin

在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

enter image description here

那么为什么我在Kotlin REPL中遇到了以上错误,并且还只针对不可变变量?

1 个答案:

答案 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次。