如何将元组收集到单独的变量中

问题描述 投票:0回答:2
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
的初始化是怎么回事?

scala tuples
2个回答
5
投票

快到了。 这就是您所需要的:

val (one, two) = giveMeTuple

根据您当前的实施

val one, two = giveMeTuple

你是说:用

one
返回的值初始化
giveMeTuple
并初始化
two
返回的值(在这种情况下
giveMeTuple
将被调用两次)。
另一个类似的例子是:

giveMeTuple

两者都将被初始化为值
val one, two = 1

相反,您想要

解构

1返回的值,并从元组中获取第一个和第二个值。在这种情况下,

giveMeTuple
当然只会被调用一次。
    


3
投票

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; () }

	
© www.soinside.com 2019 - 2024. All rights reserved.