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
的初始化是怎么回事?
快到了。 这就是您所需要的:
val (one, two) = giveMeTuple
根据您当前的实施
val one, two = giveMeTuple
你是说:用
one
返回的值初始化giveMeTuple
并初始化two
返回的值(在这种情况下giveMeTuple
将被调用两次)。另一个类似的例子是:
giveMeTuple
两者都将被初始化为值
val one, two = 1
。
相反,您想要解构由1
返回的值,并从元组中获取第一个和第二个值。在这种情况下,
giveMeTuple
当然只会被调用一次。giveMeTuple
如果我们反编译上面的代码,我们会发现这只是元组模式,它是 Scala 模式匹配功能的一部分:
val (one, two) = giveMeTuple
虽然您的示例是对同一方法的两次调用并分配给新值:
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;
()
}