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