Невозможно подумать об ученике Scala, но... в моих вокалистах я написал следующее:
( n.child.size > 0 ) && ( n.child.filter( ! _.isInstanceOf[Text] ).size == 0 )
('n' - это scala.xml.Node, но это не важно. Также не является конкретной логикой.)
Вызов child() дважды не очень хорош, поэтому я собирался его изменить:
val list = n.child
( list.size > 0 ) && ( list.filter( ! _.isInstanceOf[Text] ).size == 0 )
Но учитывая, насколько я очень ценю возможность фильтровать() и map() и такие, не требуя объявления промежуточных переменных, я сразу обнаружил это вонючим. Это так... так... так Java-ish!: Р
Увы, прорываясь через SO и Google и ScalaDocs (особенно Any и AnyRef), и The Book не оказалось ничего подходящего. Я надеялся, возможно, на что-то вроде:
n.child{ list => ( list.size > 0 ) && ( list.filter( ! _.isInstanceOf[Text] ).size == 0 ) }
или даже
n.child.with{ list => ... }
Есть ли что-то подобное? Или я просто увлекся переменным увлечением?