8
votes

Exemples d'utilisation des méthodes d'option Scala

J'ai lu la Publication du blog m'a recommandé ici . Maintenant, je me demande quelles sont certaines ces méthodes utiles. Pouvez-vous montrer des exemples d'utiliser Forall (par opposition à foreach ) et tolist de option ?


0 commentaires

3 Réponses :


6
votes

J'ai un exemple pratique de méthode Tolist . Vous pouvez le trouver dans scaldi (ma structure d'injection de dépendance Scala) dans module.scala à la ligne 72:

https: // github. Com / Olegilyenko / Scaldi / BLOB / F3697ECAA5D6E96C5486DB024FCA2D3CDB04A65 / SRC / MAIN / SCALA / SCALDI / MODULE.SCALA # L72

Dans ce contexte getBindingings peut renvoyer soit nil ou liste avec un seul élément. Je peux le récupérer en tant qu'option avec découverte de découverte . Je trouve qu'il est pratique de pouvoir convertir l'option à la liste (code> (qui soit vide ou qu'un élément) avec Tolist méthode.


1 commentaires

@AdamFraser: Désolé pour cela. J'ai mis à jour le lien et j'ai également utilisé un arbre de validation spécifique au lieu de maître.



11
votes

Beaucoup de méthodes d'option peuvent y être davantage pour l'uniformité (avec des collections) plutôt que pour leur utilité, car elles sont toutes de très petites fonctions et ne ménagent donc pas beaucoup d'effort, mais ils servent à cet effet, mais Leurs significations sont claires une fois que vous connaissez le cadre de collecte (comme on l'a dit souvent, l'option est comme une liste qui ne peut pas avoir plus d'un élément).

For'all vérifie une propriété de la valeur dans une option. S'il n'y a pas de valeur, le passe de chèque. Par exemple, si dans une location de voiture, vous êtes autorisé à un supplémentaireDiver: option [personne] , vous pouvez faire xxx

exactement la même chose que Vous feriez si plusieurs pilotes supplémentaires étaient autorisés et que vous aviez une liste.

Tolist peut être une conversion utile. Supposons que vous ayez des options: liste [option [t]], et vous souhaitez obtenir une liste [t], avec les valeurs de toutes les options qui sont certaines. Vous pouvez faire xxx

(ou meilleur options.flatmap (_. Tolist) )


0 commentaires

27
votes
  • mappe : vous permet de transformer une valeur "INTÉRIEUR" UN OPTION , comme vous le savez probablement déjà pour Liste s. Cette opération fait (code> option un fonctionnement (vous pouvez dire "Endofunctor" si vous souhaitez effrayer vos collègues)
  • Flatmap : OPTION est en fait une monade, et Flatmap en fait un (avec quelque chose comme une consommation d'une valeur unique). Cette méthode peut être utilisée si vous avez une fonction qui transforme une valeur dans une option , mais la valeur que vous avez déjà "enveloppée" dans une option , donc Flatmap vous permet d'économiser le débiteur avant d'appliquer la fonction. Par exemple. Si vous avez une option [mappe [k, v]]] , vous pouvez écrire MapOption.flatmap (_. Obtenir (touche)) . Si vous utilisez un simple mappe ici, vous obtiendrez une option [option [V]] , mais avec platmap vous obtenez un Option [v] . Cette méthode est plus fraîche que vous pourriez penser, car elle permet de chaîner des fonctions ensemble de manière très flexible (qui est une raison pour laquelle Haskell aime monads).
  • aplatissé : Si vous avez une valeur de type option [option [t]] , aplatiré active une option [T] . C'est la même chose que platmap (identité (_)) .
  • orelse : Si vous avez plusieurs alternatives enveloppées dans l'option s, et que vous souhaitez que la première contienne réellement une valeur, vous pouvez chaîner ces alternatives avec orelse : steakoption.orelse (hamburgeroption) .Orelse (saladoption)
  • getorelse : Obtenez la valeur hors de l'option , mais spécifiez une valeur par défaut si elle est vide, E.G. Nomoption.Getorelse ("inconnu") .
  • foreach : faites quelque chose avec la valeur à l'intérieur, s'il existe.
  • ISdefinefiné , isempty : Déterminez si ce option contient une valeur.
  • Forall , existe : tests si un prédicat donné contient pour la valeur. Forall est le même que option.map (test (_)). getorelse (true) , existe est identique, juste avec faux par défaut.
  • Tolist : surprise, il convertit l'option à une liste .

0 commentaires