我有一个函数返回一个元组,其中一个项目也是一个元组。
def foo: (Any, (Any, Any))
实际的类型并不是真正的Any
,但这是对实际代码的简化(因此我为了这个问题而将其复制为一个复合元组)。
现在我解释这个元组如下,希望用a1,a2,a3进行计算。
val (a1, bar) = foo
val (a2, a3) = bar
这是否有一个班轮?
答案 0 :(得分:5)
当然!你可以用同样的方式匹配它。
def foo: (Any, (Any, Any)) = (1, (2, 3))
scala> val (a1, (a2, a3)) = foo
a1: Any = 1
a2: Any = 2
a3: Any = 3
这是有效的,因为您有Tuple2[Any, Tuple2[Any, Any]]
,Tuple2
定义了unapply
方法,允许此模式匹配发生。
答案 1 :(得分:3)
很简单:
val (a1, (a2, a3)) = foo
答案 2 :(得分:1)
旁注,嵌套元组可以被提取/模式匹配,并通过这样的理解进一步计算,
val x = (1,(2,3))
for ( (a,(b,c)) <- Seq(x) ) yield a+b+c
还要考虑匹配类型,
val y = (1,("bb",3))
for ( (_,(b:String,_)) <- Seq(x) ) yield b
或与已经描述的类似,
val (a:Int, (b: Double, c: String)) = (1, (2.0, "ccc"))
a: Int = 1
b: Double = 2.0
c: String = ccc