如果我使用未密封的trait
或abstract class
在Scala中使用模式匹配,我想知道,编译器是否不知道在编译时针对该特定模式匹配,可以使用此特性/类的哪些可能的实现?所以,如果这样做,会不给模式匹配的警告,即使是在trait
/ abstract class
不密封,因为他知道哪些类型可以被使用,通过检查所有可能的依赖性/进口?
例如,如果我有一个,Option[A]
并且我只为Some[A]
但不为进行模式匹配None
,则编译器会抱怨,因为Option
是密封的。
如果编译器无法知道/解决该问题,那为什么不呢?如果编译器(理论上)可以做到这一点,那么在Scala中不使用它的原因是什么?还有其他支持这种行为的语言吗?
Foo
带有子类A
,B
和的抽象类C
,并且您所有的模式匹配项仅与这三个匹配。没有什么能阻止我添加一个新的子类D
,它会破坏您的模式匹配。
java.lang.ClassLoader
。