为什么在参数中分配val的Scala代码可以工作?
输出:Hello World10 正如我们所知,在Scala中,a为什么在参数中分配val的Scala代码可以工作?,scala,Scala,输出:Hello World10 正如我们所知,在Scala中,aval不能重新分配或更改,但这里的x正在更改为 你好,世界 打印时。解释有些意外:print有一个名为x的参数。使用x=…使用,因此print(x=“Hello World”)与print(“Hello World”)相同 见或资料来源: 注:这已在以下章节中讨论: Scala目前试图巧妙地将“x=e”视为命名参数或赋值 ... 这可能会让用户感到惊讶 建议:我们反对参数列表中的赋值 同样,对于Scala 2.13,可能在中实现了
val
不能重新分配或更改,但这里的x
正在更改为
你好,世界
打印时。解释有些意外:
print
有一个名为x
的参数。使用x=…
使用,因此print(x=“Hello World”)
与print(“Hello World”)
相同
见或资料来源:
注:这已在以下章节中讨论:
Scala目前试图巧妙地将“x=e”视为命名参数或赋值
... 这可能会让用户感到惊讶
建议:我们反对参数列表中的赋值
同样,对于Scala 2.13,可能在中实现了更改
您的代码在被弃用后仍将编译,其含义相同。任何人(至少没有足够熟悉语言规范/实现的人)都不应再将更改解释为赋值。它不是重新赋值。它只是从第一个语句中打印“Hello World”,从第二个语句中打印10。使用println(),您将在新行中看到输出。这意味着这只适用于变量
x
,不是吗?是的,很神奇,它只适用于x!。这很奇怪。另一件需要注意的事情是,如果你有,例如,var m=12;印刷品(m=13);印刷品(m)代码>,你会得到“()13”。至于原因,这里有一个官方解释和其他一些很好的见解:
object Main {
def main(args: Array[String])
{
val x = 10
print(x="Hello World")
print(x)
}
}
object Predef /*....*/ {
/*....*/
def print(x: Any) = Console.print(x)
/*....*/
}