Dav*_*ave 9 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
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,编译器不应该告诉我其中一个案例永远不能匹配吗?一个稍微复杂的例子最近引起了我的注意,导致了一个应该被编译器捕获的不必要的bug.
编辑:
只是为了更清楚这个问题.由于某种原因,我无法看到Scala中这是不可能的吗?(我可以理解这些类型是否使用泛型和类型擦除导致问题,但这看起来非常直接.)如果这不是不可能的,是否有正当理由这不是Scala?如果不是什么时候加入?;)
Mar*_*sky 22
目前,详尽无遗和冗余检查仅针对案例类构造函数模式进行.原则上,编译器也可以为其他类型的模式执行此操作.但是必须在SLS中明确指出要进行的测试.考虑到不同模式类之间的交互,这看起来可行但非平凡.因此,总而言之,这是Scala中可以从进一步贡献中获益的领域之一.
| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |