我在尝试从Eclipse执行以下代码时遇到错误,因为我无法重新分配Val,对吧?
object Test {
def main(args: Array[String]){
val tempVal = 100;
val checkval = if (tempVal > 50) 1 else 0
println("The new value is: " + checkval);
//Getting Error Below
checkval1 = if (tempVal > 200) 0
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试从命令行执行相同的操作时,为什么我没有得到相同的错误?

你没有做同样的事情- 你只是重新定义(阴影*)val,而不是重新赋值给它.如果你写y = if (x < 50) 0 else 1而不是val y = if (x < 50) 0 else 1你也会得到错误.

*这只能在REPL中使用
在REPL中,您键入的每个语句都将包含在嵌套在前一个语句的对象内的对象内.这是专门完成的,以便您可以稍后"更改" vals或classes或traits 的值.否则,您必须重新启动REPL并在每次输入拼写错误时重新键入每个语句.
所以,你的REPL会话(粗略地)编译成这样的东西:
object Line1 {
val x = 100
println(x)
object Line2 {
val y = if (x < 50) 1 else 0
println(y)
object Line3 {
val y = if (x < 50) 0 else 1
println(y)
}
val _ = Line3 // force creating the Line3 object
}
val _ = Line2 // force creating the Line2 object
}
val _ = Line1 // force creating the Line1 object
Run Code Online (Sandbox Code Playgroud)
由于Scala有嵌套作用域,Line3的y可以阴影Line2的y.
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |