Se uso un un seal trait
o abstract class
in Scala e poi uso pattern matching, mi chiedo, il compilatore non sa al momento della compilazione per questo particolare patternmatch quali possibili implementazioni di questo tratto / classe sono disponibili? Quindi, in caso affermativo, non potrebbe dare avvisi di corrispondenza del modello anche se il trait
/ abstract class
non è sigillato perché sa quali tipi potrebbero essere usati, controllando tutte le possibili dipendenze / importazioni?
Ad esempio se ho un Option[A]
e faccio pattern matching solo per Some[A]
ma non per None
, il compilatore si lamenterà, perché Option
è sigillato.
Se il compilatore non può saperlo / risolverlo, perché non può? E se il compilatore (teoricamente) può farlo, quali sono i motivi per cui non viene utilizzato in Scala? Ci sono altre lingue che supportano quel tipo di comportamento?
Foo
con sottoclassi A
, B
e C
, e tutte le tue corrispondenze di pattern corrispondono solo a quelle tre. Niente mi impedisce di aggiungere una nuova sottoclasse D
che farà esplodere le tue combinazioni di schemi.
java.lang.ClassLoader
.