inactivo ponderando de un estudiante de Scala tal vez, pero ... en mis tinkerings He escrito lo siguiente:.¿declaración "con" equivalente para Scala?
(n.child.size > 0) && (n.child.filter(! _.isInstanceOf[Text]).size == 0)
('n' es un scala.xml.Node, pero eso no es importante ni es . la lógica particular)
Calling niño() dos veces no es tan bueno, así que estaba a punto de cambiarlo:
val list = n.child
(list.size > 0) && (list.filter(! _.isInstanceOf[Text]).size == 0)
Pero dado lo mucho que he llegado a apreciar mucho poder filtrar() y map() y tal sin necesidad de declarar variables intermedias, Encontré esto de mal olor. Es tan ... entonces ... ¡así que Java-ish! : p
Por desgracia, cavar a través de SO y Google y ScalaDocs (especialmente Any y AnyRef) y The Book no ha encontrado nada apropiado. Tenía la esperanza de tal vez por algo así como:
n.child{ list => (list.size > 0) && (list.filter(! _.isInstanceOf[Text]).size == 0) }
o incluso
n.child.with{ list => ... }
hace algo como esto existe? ¿O acabo de quedar atrapado en un fervor de menos?
Además, ese filtro/tamaño es ineficiente. Reemplácelo con list.forall (_. IsInstanceOf [Text]) –
Eso es lo que pensé inicialmente, pero no es exactamente lo mismo: necesito saber que la lista contiene solo elementos de texto Y no está vacía. Acabo de encontrar el "conteo" de Iterable que puede acortar un poco las cosas: (n.child.size> 0) && (n.child.count (! _.isInstanceOf [Text]) == 0) –
Aún mejor: ! (n.child.isEmpty || n.child.exists (! _.isInstanceOf [Text])) –