斯卡拉 – 缺少非详尽匹配的警告
发布时间:2020-12-16 18:51:23 所属栏目:安全 来源:网络整理
导读:启用-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 _:
启用-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 } } 看来我在Scala 2.8.0的日子里确切地说是same problem before,没有足够的答案. 编辑 @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 } 发出警告的唯一方法是按顺序排列一个具体的类! 解决方法
它确实在树干上抱怨:
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |