12
votes

Idiome pour l'option de Scala lors de tests d'égalité

Qu'est-ce qui est un moyen plus facile / nettoyant de faire cela? XXX PRE>

J'ai essayé p>

o.test( (x) => x == 4 )


2 commentaires

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.


7 Réponses :


7
votes

Cela semble raisonnablement propre à moi: xxx pré>

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)
}


3 commentaires

Quel est le but du '==' après le 4?


" 4 == " 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. ==) ou o.map (_ == 4) ou o.map (x => x == 4) . Point clé ici est que tout ce que vous passez à option.map () n'est évalué que sur des options autres.



5
votes

Que diriez-vous de cela:

val o = Some(4)
o match {
  case Some(4) => true
  case _ => false
}


0 commentaires

2
votes

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


2 commentaires

La deuxième méthode ne cadge pas compte du moment où O n'est pas.


D'Oh! Édité pour réfléchir. Merci!



10
votes

Vous pouvez également utiliser:

if (o == Some(4)) //do something


0 commentaires

1
votes
o.map(_ == 4).getOrElse(false)

0 commentaires

20
votes

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


0 commentaires

2
votes

Essayez ceci:

val o = Some(4)
o.exists(4 == _)


0 commentaires