我有一个函数,它返回一个元组,其中一项也是元组。
def foo: (Any, (Any, Any))实际的类型并不是真正的Any,但这是对实际代码的简化(因此,为了解决这个问题,我将其称为复合元组)。
现在我像下面这样解构这个元组,希望使用a1、a2、a3进行计算。
val (a1, bar) = foo
val (a2, a3) = bar有单程班轮吗?
发布于 2015-03-27 22:28:38
当然了!你可以用同样的方式进行模式匹配。
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方法,允许进行这种模式匹配。
发布于 2015-03-27 22:28:39
非常简单:
val (a1, (a2, a3)) = foo发布于 2015-03-28 15:40:05
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 = ccchttps://stackoverflow.com/questions/29303046
复制相似问题