Lan*_*dei 16 scala pattern-matching
通常你有"对称"匹配,并想写下这样的东西:
def g(p:(Int,Int)) = p match {
case (10,n) | (n,10) => println(n)
case _ => println("nope")
}
Run Code Online (Sandbox Code Playgroud)
这是不允许的,但如果每一个可选项具有相同的变量与同一类型的,这不应该是一个问题,因为它可以被翻译成不同的情况:
def g(p:(Int,Int)) = p match {
case (10,n) => println(n)
case (n,10) => println(n)
case _ => println("nope")
}
Run Code Online (Sandbox Code Playgroud)
那么为什么我们有这个限制呢?
Kim*_*bel 21
可能是因为需要一些时间来实施,而且在其他地方花费更多时间.它还会不必要地增加语言及其编译器的复杂性.正如您已经提到的,可以轻松避免这个问题.避免此问题的另一种方法是编写自定义提取器:
object ThisOrThat {
def unapply(p:(Int,Int)):Option[Int] = p match {
case (10, n) => Some(n)
case (n, 10) => Some(n)
case _ => None
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1531 次 |
最近记录: |