compiler-construction - 在 Scala 中更好地对匹配进行类型检查

标签 compiler-construction scala pattern-matching typechecking

scala> class A
defined class A

scala> class B
defined class B

scala> val a: A = new A
a: A = A@551510e8

scala> a match {
     | case _: B => println("unlikely")
     | case _ => println("no match")
     | }
no match

在上面的例子中,编译器不应该告诉我其中一种情况永远不会匹配吗?最近一个稍微复杂的例子让我发现了,这导致了一个应该被编译器捕获的不必要的错误。

编辑:

只是为了更清楚地了解这个问题。由于某种我看不到的原因,这在 Scala 中是不可能的吗? (我可以理解这些类型是否使用了泛型并且类型删除导致了问题,但这看起来很简单。)如果这不是不可能的,那么是否有正当理由这不在 Scala 中?如果没有,什么时候添加? ;)

最佳答案

目前,仅对案例类构造函数模式进行详尽和冗余检查。原则上,编译器也可以为其他类型的模式执行此操作。但是必须在 SLS 中具体说明进行了哪些测试。考虑到不同模式类之间的交互,这看起来可行但并非微不足道。因此,总而言之,这是 Scala 中可以从进一步贡献中受益的领域之一。

关于compiler-construction - 在 Scala 中更好地对匹配进行类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388165/

相关文章:

c# - 从 Microsoft .net 调用单声道 c# 代码?

scala - Flink : No operators defined in streaming topology.无法执行

r - 合并部分匹配的字符串

scala - Elasticsearch 脚本将元素添加到数组中

scala - 如何模式匹配scala列表的头部和尾部类型?

pattern-matching - 如何在保护条款中使用 'in' 运算符?

compiler-construction - 使用 libclang 从字符串构造 AST

compiler-construction - 对编程语言进行逆向工程或 'Unsupervised Learning of Languages'

c - 在多进程 scanf 的 MPI 中只接受一次输入并将垃圾值分配给其他?

scala - 为方法 Apply 提供太多参数