代码之家  ›  专栏  ›  技术社区  ›  dbyrne

scala元组解构

  •  22
  • dbyrne  · 技术社区  · 14 年前

    我刚开始接触斯卡拉,遇到一个让我恼火的小嗝。

    并行初始化两个var很好: var (x,y) = (1,2)

    但是,我找不到并行分配新值的方法: (x,y) = (x+y,y-x) //invalid syntax

    最后我写了这样的东西: val xtmp = x+y; y = x-y; x = xtmp

    我认识到编写函数代码是避免这种情况发生的一种方法,但是在某些情况下,var只是更有意义的。

    我有两个问题:

    1)有没有更好的方法?我错过什么了吗?

    2)不允许真正的并行分配的原因是什么?

    2 回复  |  直到 14 年前
        1
  •  22
  •   Michel Krämer    14 年前

    不幸的是,您不能在scala中执行多个分配。但是你可以使用元组,如果它们适合你的问题:

    scala> var xy = (1,2)
    xy: (Int, Int) = (1,2)
    
    scala> xy = (xy._1 + xy._2, xy._2 - xy._1)
    xy: (Int, Int) = (3,1)
    

    这种方式, xy 是一个具有两个值的元组。第一个值可以使用 xy._1 ,第二个使用 xy._2 .

        2
  •  0
  •   hyperboreean    14 年前

    scala有两种类型的变量:vals和vars。VAL与Java的最终变量相似,所以就我所理解的,您要问的是,将新的值并行地分配给VARS的唯一方法是:

    scala> val (x, y) = (1, 2);
    

    scala> val s = (3, 4);
    s: (Int, Int) = (3,4)
    
    scala> s._1
    res1: Int = 3
    
    scala> s._2
    res2: Int = 4