为什么不可能链接模式匹配结构?例如,以下内容是合法的,如果是无意义的,
val a = ADT(5)
val b = a match {
case ADT(a) if a > 4 => ADT(a * 3)
case ADT(a) => ADT(a + 1)
}
b match {
case ADT(a) if a > 13 => doSomething(a)
case _ => {}
}
但以下不是:
a match {
case ADT(a) if a > 4 => ADT(a * 3)
case ADT(a) => ADT(a + 1)
} match {
case ADT(a) if a > 13 => doSomething(a)
case _ => {}
}
我怀疑这是因为我一开始就不应该这样做,但原则上我不明白为什么它不合法。
是的,它应该可以工作,因为(几乎)Scala 中的所有内容都是表达式,并且每个表达式都可以用作模式匹配。
在这种情况下,模式匹配是一个表达式,因此它可以被另一个“链式”模式匹配使用。但编译器不喜欢它。
用括号给编译器一点提示会有所帮助:
case class ADT(value: Int)
val a = ADT(5)
(a match {
case ADT(a) if a > 4 => ADT(a * 3)
case ADT(a) => ADT(a + 1)
}) match {
case ADT(a) if a > 13 => println(a)
case _ => {}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)