在阅读Scala for the Impatient一书时,我遇到了这个问题:
想出一种情况,即赋值 x = y = 1 在 Scala 中有效。(提示:为 x 选择合适的类型。)
我不确定作者这个问题到底是什么意思。赋值不返回值,所以var x = y = 1
应该返回 Unit() 作为 x 的值。有人可以指出我在这里可能缺少什么吗?
谢谢
在阅读Scala for the Impatient一书时,我遇到了这个问题:
想出一种情况,即赋值 x = y = 1 在 Scala 中有效。(提示:为 x 选择合适的类型。)
我不确定作者这个问题到底是什么意思。赋值不返回值,所以var x = y = 1
应该返回 Unit() 作为 x 的值。有人可以指出我在这里可能缺少什么吗?
谢谢
其实x
就是Unit
在这种情况下:
var y = 2
var x = y = 1
可以读作:
var y = 2
var x = (y = 1)
最后:
var x: Unit = ()
您可以x=y=1
在没有错误的情况下输入 REPL shell:
var x:Unit = {}
var y = 0
x = y = 1
这是另一种鲜为人知的情况,其中 setter 方法返回其参数。请注意,类型x
实际上Int
在这里:
object AssignY {
private var _y: Int = _
def y = _y
def y_=(i: Int) = { _y = i; i }
}
import AssignY._
var x = y = 1
(此功能在 XScalaWT 库中使用,并在该问题中进行了讨论。)
顺便说一句,如果仍然需要为两个变量分配相同的值,则使用:
scala> var x@y = 1 x: 整数 = 1 y: 整数 = 1
这是有效的,但不明智,这会造成混乱。
scala> var x=y=1
x: Unit = ()
scala> y
res60: Int = 1
scala> var x@y = 1
x: Int = 1
y: Int = 1