object Main {
def main(args: Array[String])
{
val x = 10
print(x="Hello World")
print(x)
}
}
Run Code Online (Sandbox Code Playgroud)
输出:Hello World10
我们知道,在Scala val中,无法重新分配或更改,但这里x正在改变
你好,世界
打印时.
Sum*_*uma 71
解释是出乎意料的:print有一个名为的参数x.使用x = ...用途命名的参数,因此print(x="Hello World")是一样的print("Hello World").
请参阅Scala Predef文档或Predef.scala源代码:
object Predef /*....*/ {
/*....*/
def print(x: Any) = Console.print(x)
/*....*/
}
Run Code Online (Sandbox Code Playgroud)
注意:这已在Scala内部邮件列表中讨论过:
Scala目前试图明智地将"x = e"视为命名参数或赋值......这对用户来说可能是令人惊讶的....
提案:我们弃用参数列表中的赋值
对此也存在问题SI-8206,该变化可能在Scala 2.13的问题426中实现.
您的代码仍将在弃用后编译,具有相同的含义.改变将是没有人(至少没有人熟悉语言规范/实现)应该期望它被解释为赋值.
| 归档时间: |
|
| 查看次数: |
2894 次 |
| 最近记录: |