在阅读Scala for the Impatient这本书时,我遇到了这个问题:
想出一个情况,在Scala中赋值x = y = 1是有效的。(提示:为x选择合适的类型。)
我不确定作者具体指的是什么意思。赋值操作没有返回值,所以像var x = y = 1
这样的语句应该返回Unit()作为x的值。有人能指出我可能漏掉了什么吗?
谢谢
在阅读Scala for the Impatient这本书时,我遇到了这个问题:
想出一个情况,在Scala中赋值x = y = 1是有效的。(提示:为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
时不会出现错误的点:
var x:Unit = {}
var y = 0
x = y = 1
var x = ()
。 - cayhorstmann这里还有一个不太常见的情况,即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库中使用,并在那个问题中讨论过。)
implicit def unit2int(u: Unit) = 42; var x = 1; var y = 2; x = y = 1
怎么样? - cayhorstmann顺便说一下,如果仍然需要将相同的值赋给两个变量,则可以使用以下方法:
scala> var x@y = 1 x: Int = 1 y: Int = 1
这是有效的,但不太合理,会造成混淆。
scala> var x=y=1
x: Unit = ()
scala> y
res60: Int = 1
scala> var x@y = 1
x: Int = 1
y: Int = 1