0__*_*0__ 6 scala pattern-matching
-unchecked启用时,为什么以下内容不会产生警告:
object Order {
sealed trait EntryOption
case object EmptyEntry extends EntryOption
trait Entry extends EntryOption
def isEmpty(a: EntryOption): Boolean = a match {
case EmptyEntry => true
// case _: Entry => false
}
}
Run Code Online (Sandbox Code Playgroud)
在Scala 2.8.0 之前,我似乎遇到了完全相同的问题,没有足够的答案.
编辑
@Jed对我来说,仅对非抽象类发出警告是没有意义的Entry.考虑以下情况:
trait Order {
sealed trait EntryOption
case object EmptyEntry extends EntryOption
abstract sealed class Entry extends EntryOption
def isEmpty(a: EntryOption): Boolean = a match {
case EmptyEntry => true
// case _: Entry => false
}
}
trait OrderImpl extends Order {
final class EntryImpl extends Entry
}
Run Code Online (Sandbox Code Playgroud)
使警告出现唯一的办法是有一个具体类Entry的Order!
它确实在主干上抱怨:
scala> object Order {
| sealed trait EntryOption
| case object EmptyEntry extends EntryOption
| trait Entry extends EntryOption
|
| def isEmpty( a: EntryOption ) : Boolean = a match {
| case EmptyEntry => true
| // case _: Entry => false
| }
| }
<console>:18: warning: match is not exhaustive!
missing combination Entry
def isEmpty( a: EntryOption ) : Boolean = a match {
^
defined module Order
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1073 次 |
| 最近记录: |