def giveMeTuple: Tuple2[String, String] = {
Tuple2("one", "two")
}
def testFive: Unit = {
val one, two = giveMeTuple
println(one)
println(two)
()
}
testFive
产地:
(one,two)
(one,two)
但我在期待:
one
two
one
和two
的初始化是怎么回事?
答案 0 :(得分:4)
几乎就在那里。 这就是你需要的:
val (one, two) = giveMeTuple
使用
val one, two = giveMeTuple
你说的是:用one
返回的值初始化giveMeTuple
并初始化two
返回的giveMeTuple
值(在这种情况下giveMeTuple
将被调用两次)
另一个类似的例子是
val one, two = 1
其中两者都将初始化为值1
相反,您希望解构返回giveMeTuple
的值,并从元组中获取第一个和第二个值。在这种情况下,giveMeTuple
只会被调用一次。
答案 1 :(得分:2)
您缺少括号:
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;
()
}