【问题标题】:x = y =1 in Scala?x = y =1 在 Scala 中?
【发布时间】:2012-04-22 01:36:47
【问题描述】:

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

想出一种情况,其中赋值 x = y = 1 在 斯卡拉。 (提示:为 x 选择合适的类型。)

我不确定作者这个问题的确切含义。赋值不返回值,所以像var x = y = 1 这样的东西应该返回 Unit() 作为 x 的值。有人可以指出我在这里可能缺少什么吗?

谢谢

【问题讨论】:

  • 我强烈怀疑作者将 x 视为 Unit 类型 - “有效”意味着“并且有某种目的”。跨度>

标签: scala return-value variable-assignment return-type


【解决方案1】:

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

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

scala> y
res60: Int = 1

scala> var x@y = 1
x: Int = 1
y: Int = 1

【讨论】:

    【解决方案2】:

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

    scala> var x@y = 1 x: 整数 = 1 y: 整数 = 1

    【讨论】:

      【解决方案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 库中使用,并在 that question 中进行了讨论。)

      【讨论】:

      • 很明显,这不是我的想法 :-) 但是如果你想要奇怪的解决方案,implicit def unit2int(u: Unit) = 42; var x = 1; var y = 2; x = y = 1
      【解决方案4】:

      您可以在 REPL shell 中输入x=y=1 而不会出错:

      var x:Unit = {}
      var y = 0
      x = y = 1
      

      【讨论】:

      • 这就是我的想法,除了我会写var x = ()
      【解决方案5】:

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

      var y = 2
      var x = y = 1
      

      可以读作:

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

      最后:

      var x: Unit = ()
      

      【讨论】:

      • 所以这个问题的重点是证明 var x = y = 1 是有效的?
      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      相关资源
      最近更新 更多