sealed class A
class B1 extends A
class B2 extends A
Supponendo che abbiamo un elenco di oggetti di classe A
: val l: Lista [A] = List (nuova B1, nuova B2, nuova B1, nuova B1)Quando usare isInstanceOf e quando usare un'istruzione match-case (in Scala)?
E vogliamo filtrare il elementi del tipo B1. Poi abbiamo bisogno di un predicato e potrebbero utilizzare i seguenti due alternative:
l.filter(_.isInstanceOf[B1])
O
l.filter(_ match {case b: B1 => true; case _ => false})
Personalmente, mi piace il primo approccio di più, ma ho letto spesso, si dovrebbe utilizzare l'istruzione match-case
più spesso (per ragioni che non conosco).
Pertanto, la domanda è: ci sono degli svantaggi nell'uso di isInstanceOf
invece della dichiarazione match-case
? Quando si dovrebbe usare quale approccio (e quale approccio dovrebbe essere usato qui e perché)?
E ti dà il tipo più stretto alla fine ('Elenco [B1]'). –
Sembra molto più leggibile, grazie.Ma quale sarà il caso predefinito in questa affermazione? Dove posso leggere ulteriori informazioni di base su questa dichiarazione del caso di scelta rapida e su come viene utilizzata? –
@JohnThreepwood dai un'occhiata a [questo post] (http://ochafik.com/blog/?p=393). Non è il massimo, ma è comunque molto buono "il perché di raccogliere". In breve, raccogli è come una mappa, ma crea un lavoro solo per quei valori che sono definiti per la funzione * (parziale) * che passi a questo metodo. La corrispondenza del modello di Scala in questo caso viene eseguita in [PartialFunction] (http://stackoverflow.com/questions/5668053/scala-partial-functions). Inoltre, è necessario utilizzare parentesi graffe. –