Disons que j'ai deux INT facultatifs (les deux peuvent être certains ou aucun):
(one :: two :: Nil).flatten.reduceLeftOption(_ + _) // Some(3)
4 Réponses :
(one ++ two).reduceOption(_ + _)
Excellente réponse, monsieur. Mais si un code> n'est pas, tout le résultat n'est pas, non?
Oh, à droite, vous vouliez obtenir 0 au cas où l'option est Aucun code>? Ensuite, ajoutez simplement un
getorelse (0) code> à la fin. Ou mieux encore, il suffit de faire
one.getorelse (0) + deux.getorelse (0) code>.
En fait, je préférerais d'obtenir aucun, si tous les deux n'en étiaient pas. Mais si le premier (un) est néancière et le second (deux) est un peu (2) (par exemple), je préférerais certains (2). Le code ci-dessus ne renvoie aucun.
J'ai compris. Je pense que dans ce cas chaque réponse jusqu'à présent est effectivement incorrecte alors. C'est une exigence rare.
Que diriez-vous de (un ++ deux) .Reduçition (_ + _) code> alors? C'est fondamentalement que vous possédez le code, seulement légèrement raccourci.
Bien que j'aime Scalaz, cela devrait être la réponse, car c'est une doublure simple qui ne nécessite aucune bibliothèque externe.
Vous pouvez essayer ceci:
for( x <- one.orElse(Some(0)); y <- two.orElse(Some(0))) yield x+y
one.map (deux.getorelse (0) + _) code> est incorrect: si deux est
nucle code> Vous obtiendrez
quelques (1) code> de aucun.
Ya, j'ai attrapé ça et modifié ma réponse
La réponse à Scalaz obligatoire consiste à utiliser l'option Scalaz monoïde: Il fera ce que vous voulez en ce qui concerne NONE: P> scala> 1.some |+| 2.some
res3: Option[Int] = Some(3)
Merci, c'est génial! Il semble juste que l'on veut légèrement surkill pour importer une nouvelle bibliothèque. Je vais l'accepter si rien de mieux montre :-)
Fais-le! Scalaz est une très première bibliothèque I Ajouter à n'importe quel projet. Une fois que vous avez commencé à vous y habituer, vous trouverez qu'il y a des tonnes de gemmes là-bas, vous ne voudrez pas vivre sans :)
Merci d'avoir répondu. Ça a vraiment l'air propre. On dirait que je devrai passer plus de temps avec Scalaz :-)
Voici une belle vidéo d'introduction qui commence par des monoïdes de notre propre @Oxbow_lakes: CompétencesMatter.com/ Podcast / Scala / Pratique-Scalaz-2518
Merci! Comme une autre option, les chats de la bibliothèque ont fonctionné pour moi. importer des chats.implicites ._ code>
Que diriez-vous:
one.map(_ + two.getOrElse(0)).orElse(two)
Merci pour l'édition Ben James, peut-être que je suis juste vieux et grincheux, mais j'avais un mal de tête "du premier monde" lisant la version originale ...
Journée internationale des travailleurs régis. Une fois par an. Ne sois pas si petit :-)
Pourquoi supprimer le commentaire de la Journée internationale des travailleurs? Vous n'avez pas de style ..
À peu près un duplicata: Stackoverflow.com/questions/17188123/... :) Plus d'infos Il y a au moins;)