首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala中解构复合元组

在Scala中解构复合元组
EN

Stack Overflow用户
提问于 2015-03-27 22:26:18
回答 3查看 625关注 0票数 2

我有一个函数,它返回一个元组,其中一项也是元组。

代码语言:javascript
复制
def foo: (Any, (Any, Any))

实际的类型并不是真正的Any,但这是对实际代码的简化(因此,为了解决这个问题,我将其称为复合元组)。

现在我像下面这样解构这个元组,希望使用a1、a2、a3进行计算。

代码语言:javascript
复制
val (a1, bar) = foo
val (a2, a3) = bar

有单程班轮吗?

EN

回答 3

Stack Overflow用户

发布于 2015-03-27 22:28:38

当然了!你可以用同样的方式进行模式匹配。

代码语言:javascript
复制
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方法,允许进行这种模式匹配。

票数 5
EN

Stack Overflow用户

发布于 2015-03-27 22:28:39

非常简单:

代码语言:javascript
复制
val (a1, (a2, a3)) = foo
票数 3
EN

Stack Overflow用户

发布于 2015-03-28 15:40:05

代码语言:javascript
复制
val x = (1,(2,3))
for ( (a,(b,c)) <- Seq(x) ) yield a+b+c

还要考虑在类型上匹配,

代码语言:javascript
复制
val y = (1,("bb",3))
for ( (_,(b:String,_)) <- Seq(x) ) yield b

或者类似于已经描述的,

代码语言:javascript
复制
val (a:Int, (b: Double, c: String)) = (1, (2.0, "ccc"))
a: Int = 1
b: Double = 2.0
c: String = ccc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29303046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档