Idle meditando da uno studente Scala forse, ma ... nei miei tinkerings ho scritto quanto segue:."With" equivalente alla versione per Scala?
(n.child.size > 0) && (n.child.filter(! _.isInstanceOf[Text]).size == 0)
('n' è una scala.xml.Node, ma che non è importante né . la logica particolare)
Calling bambino() due volte non è così buono, così mi stava per cambiare:
val list = n.child
(list.size > 0) && (list.filter(! _.isInstanceOf[Text]).size == 0)
Ma visto quanto sono venuto a molto apprezzeranno la possibilità di filtrare() e map() e tali senza dover dichiarare variabili intermedie, Ho trovato questo immediatamente puzzolente. È così ... così ... così Java-ish! : p
Purtroppo, scavando attraverso SO e Google e gli ScalaDocs (in particolare Any e AnyRef) e Il libro non ha trovato nulla di appropriato. Speravo forse di qualcosa di simile:
n.child{ list => (list.size > 0) && (list.filter(! _.isInstanceOf[Text]).size == 0) }
o anche
n.child.with{ list => ... }
fa qualcosa del genere esiste? O mi sto semplicemente ritrovando coinvolto in un fervore senza tregua?
Inoltre, che cosa filtro/dimensione è inefficiente. Sostituiscilo con list.forall (_. IsInstanceOf [Testo]) –
Questo è quello che pensavo inizialmente, ma non è esattamente la stessa cosa: ho bisogno di sapere che l'elenco contiene solo elementi di testo AND non è vuoto. Ho appena trovato il "conteggio" di Iterable che può accorciare un po 'le cose: (n.child.size> 0) && (n.child.count (! _.isInstanceOf [Testo]) == 0) –
Ancora meglio: ! (n.child.isEmpty || n.child.exists (! _.isInstanceOf [Testo])) –