Scala并发症。可变重新分配

时间:2013-12-18 12:16:54

标签: scala

我试图了解Scala的工作原理。所以我输入了这段代码。

var name = "eMmanuel"
val n = name.exists(_.isUpper)

name = "book"

只是看着它,在我看来,我希望ntrue,我编译它和n: Boolean = true,这是可以理解的。但在控制台中我看到一些奇怪的东西。

name: String = book
n: Boolean = true
name: String = book

编译后,来自控制台的第一行结果现在告诉我name: String = book,如果name现在是String = book,为什么n: Boolean = true?这不应该是false吗?因为毕竟它显示name: String = book显然没有大写字母!

1 个答案:

答案 0 :(得分:5)

我假设name = book实际上是name = "book"

n的值会保持不变,因为它是val val仅在分配时评估一次(还有lazy val在第一次取消引用时评估)。 参见例如here 了解更多信息。

在您的具体情况下,您似乎希望每次评估n ,这意味着您需要将n声明为def ,即:

def n = name.exists(_.isUpper) 

这将创建一个无参数方法,每次调用n时都会对其进行评估。