14

在阅读Scala for the Impatient一书时,我遇到了这个问题:

想出一种情况,即赋值 x = y = 1 在 Scala 中有效。(提示:为 x 选择合适的类型。)

我不确定作者这个问题到底是什么意思。赋值不返回值,所以var x = y = 1应该返回 Unit() 作为 x 的值。有人可以指出我在这里可能缺少什么吗?

谢谢

4

5 回答 5

13

其实x就是Unit在这种情况下:

var y = 2
var x = y = 1

可以读作:

var y = 2
var x = (y = 1)

最后:

var x: Unit = ()
于 2012-04-09T17:49:37.700 回答
6

您可以x=y=1在没有错误的情况下输入 REPL shell:

var x:Unit = {}
var y = 0
x = y = 1
于 2012-04-09T17:49:47.877 回答
3

这是另一种鲜为人知的情况,其中 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 库中使用,并在该问题中进行了讨论。)

于 2012-04-09T21:28:49.087 回答
1

顺便说一句,如果仍然需要为两个变量分配相同的值,则使用:

scala> var x@y = 1
x: 整数 = 1
y: 整数 = 1
于 2012-04-11T16:03:11.870 回答
0

这是有效的,但不明智,这会造成混乱。

scala> var x=y=1
x: Unit = ()

scala> y
res60: Int = 1

scala> var x@y = 1
x: Int = 1
y: Int = 1
于 2018-06-15T10:16:56.110 回答