【问题标题】:Tuple parameter declaration and assignment oddity元组参数声明和赋值奇怪
【发布时间】:2010-12-10 02:47:56
【问题描述】:

我可以如下分配一个元组:

var (min, max) = (1, 2)

但是我不能重新分配如下

(min, max) = (1, 3) //compiler error: ';' expected but '=' found

相反,我似乎不得不这样做:

min = 1
max = 3

为什么后者有效而前者无效?

【问题讨论】:

    标签: syntax scala tuples


    【解决方案1】:

    嗯,因为它是这样指定的,我想。

    这个,元组赋值,是模式匹配的一个例子。模式匹配发生在我记得的三个地方:

    var PATTERN = ... // or val
    
    for (PATTERN <- ...) ...
    
    case PATTERN => ...
    

    所以所有这些情况都有效:

    val l = List((1,'a'), (2,'b'), (3,'c'))
    var (n, c) = l(0)
    for ((n, c) <- l) println(n+": "+c)
    l(1) match {
      case (n, c) => println(n+": "+c)
    }
    

    现在,举最后一个例子,使用case 的例子。请注意,该示例中的nc与之前定义的nc 相同。模式匹配会将值分配给 new 标识符 nc,这将影响 case 语句的范围的先前定义。同样的事情发生在for 示例上,它并没有改变之前定义的nc

    现在,您想要覆盖以前的值,而不是为新标识符分配新值。这不是模式匹配的工作方式,这意味着实现它需要一个全新的规则。由于 Scala 温和地推动人们走向不变性,我认为他们没有创建新规则来解决这个问题并不是不合理的。

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多