Qu'est-ce qui est un moyen plus facile / nettoyant de faire cela? J'ai essayé p> o.test( (x) => x == 4 )
7 Réponses :
Cela semble raisonnablement propre à moi: Si vous le souhaitez, vous pouvez même ajouter une conversion implicite pour ajouter une méthode de commodité pour ceci: p> implicit def richOption[A](o: Option[A]) = new {
def test(p: A => Boolean): Boolean = o.map(p).getOrElse(false)
}
Quel est le but du '==' après le 4?
" 4 == code>" est une fonction qui teste l'égalité avec 4
SCALA SUCRE. 4 == est traité comme une fonction anonyme d'un argument dans ce cas. Plus clairement (mais plus verboiselement) pourrait être: o.map (4. ==) code> ou o.map (_ == 4) code> ou o.map (x => x == 4) code>. Point clé ici est que tout ce que vous passez à option.map () n'est évalué que sur des options autres.
Que diriez-vous de cela:
val o = Some(4)
o match {
case Some(4) => true
case _ => false
}
Ce qui suit me semble le plus intuitif pour moi, si vous ne vous souciez pas de la création d'objets au-dessus de la tête.
val o = Some(4) val Some(x) = o; x==4 // Edit: will not compile of o = None
La deuxième méthode ne cadge pas compte du moment où O n'est pas.
D'Oh! Édité pour réfléchir. Merci!
Vous pouvez également utiliser:
if (o == Some(4)) //do something
o.map(_ == 4).getOrElse(false)
C'est la manière la plus propre la plus propre, la plus idiomatique de le faire.
val o = Some(4) o.exists(_ > 0) // true o.exists(_ > 100) // false
Essayez ceci:
val o = Some(4) o.exists(4 == _)
Dupliqué exact: Stackoverflow.com/questions/1611872/... - qui, en fait, est la première question" associée "énumérée.
Je n'ai pas marché quand j'ai cherché. Merci de les lier.