-1

我有一个关于不相交匹配模式的问题。当每个案例没有踩到其他案例时,匹配模式是不相交的。

def func(list: List[Int]): Int = list match {
  case Nil => 0
  case x::t if (x < func(t)) => x
  case x::t => func(t)
}

我的问题:“if”语句是否也算在内,以检查这些情况是否不相交?因此,如果我们有这样的修补模式,则意味着最后一种情况也包括第二种情况,并且无论如何它都不会脱节。但是如果我将最后一个案例更改为

case x::t if (x >= func(t)) => func(t)

匹配模式会被认为是不相交的吗?

4

1 回答 1

0

因为x < func(t)= !(x >= func(t)),是的,这些模式都是不相交的。无论如何,编译器都不使用谓词不相交;这不会产生具体影响。

于 2017-05-18T09:59:00.130 回答