Интересно, если я использую Un Seal trait
или abstract class
Scala, а затем использую сопоставление с образцом, не знает ли компилятор во время компиляции для этого конкретного образца, какие возможные реализации этой черты / класса доступны? Так что, если это так, может ли он не выдавать предупреждения о совпадении с образцом, даже если trait
/ abstract class
не запечатан, потому что он знает, какие типы могут использоваться, проверяя все возможные зависимости / импорт?
Например, если у меня есть Option[A]
и я сопоставляю шаблоны только для, Some[A]
но не для None
, компилятор будет жаловаться, потому что Option
запечатан.
Если компилятор не может знать / решить это, то почему он не может? И если компилятор (теоретически) может это сделать, то каковы причины того, что он не используется в Scala? Существуют ли другие языки, поддерживающие такое поведение?
Foo
с подклассами A
, B
и C
, и все ваши сопоставления с образцом соответствуют только этим трем. Ничто не мешает мне добавить новый подкласс, D
который взорвет ваши соответствия шаблону.
java.lang.ClassLoader
.