你缺少括號:
val (one, two) = giveMeTuple
如果我們編譯上面的代碼中,我們會看到,這僅僅是一個元組模式是Scalas模式的一部分匹配的特徵:
def main(args: Array[String]): Unit = {
private[this] val x$1: (String, String) = (TupleTest.this.giveMeTuple: (String, String) @unchecked) match {
case (_1: String, _2: String)(String, String)((one @ _), (two @ _)) => scala.Tuple2.apply[String, String](one, two)
};
val one: String = x$1._1;
val two: String = x$1._2;
()
}
雖然你的例子是雙重調用相同的方法並賦值爲新值:
def giveMeTuple: (String, String) = scala.Tuple2.apply[String, String]("one", "two");
def main(args: Array[String]): Unit = {
val one: (String, String) = TupleTest.this.giveMeTuple;
val two: (String, String) = TupleTest.this.giveMeTuple;
()
}
感謝您的解釋。這意味着,聲明幾個變量將使用正確的值初始化所有變量?這是否意味着右側將被執行多次,或者返回值將被複制,還是會創建多個對單個值的引用? – dangonfast
是的,例如,如果你做'val one,two = 1',兩者的值都是'1'。 右側將執行多次。 – matteobarbieri
好的。我認爲當使用元組賦值語法'val(one,two)= ...'時,右側將只執行一次,這正是我想要的(右側在我的情況下可能會很貴) – dangonfast