我试图了解Scala的工作原理.所以我输入了这段代码.
var name = "eMmanuel" val n = name.exists(_.isUpper) name = "book"
只是看着它,在我看来,我希望n
是true
,我编译这个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
哪个显然没有大写字母!
我假设name = book
其实是name = "book"
.
n
将具有不变的值,因为它是一个val
.A val
仅在赋值时被评估一次(还有lazy val
在第一次取消引用时评估的s).有关更多信息,请参见此处.
在您的特定情况下,看起来您希望n
每次都进行评估,这意味着您需要声明n
为adef
,即:
def n = name.exists(_.isUpper)
这将创建一个无参数方法,每次调用时都会对其进行评估n
.