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 code> (par opposition à
foreach code>) et
tolist code> de
option p>? P>
3 Réponses :
J'ai un exemple pratique de Dans ce contexte méthode Tolist Code>. Vous pouvez le trouver dans scaldi (ma structure d'injection de dépendance Scala) dans module.scala à la ligne 72: P>
getBindingings code> peut renvoyer soit
nil code> ou
liste code> avec un seul élément. Je peux le récupérer en tant qu'option code> code> avec
découverte de découverte code>. Je trouve qu'il est pratique de pouvoir convertir l'option
code> à la liste code> (code> (qui soit vide ou qu'un élément) avec
Tolist code> méthode. P>
@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.
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 exactement la même chose que Vous feriez si plusieurs pilotes supplémentaires étaient autorisés et que vous aviez une liste. P> 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 p> (ou meilleur supplémentaireDiver: option [personne] code>, vous pouvez faire p>
options.flatmap (_. Tolist) code>) P> p>
mappe code>: vous permet de transformer une valeur "INTÉRIEUR" UN OPTION code> CODE>, comme vous le savez probablement déjà pour Liste code> s. Cette opération fait (code> option code> un fonctionnement (vous pouvez dire "Endofunctor" si vous souhaitez effrayer vos collègues) LI>
-
Flatmap CODE>: OPTION CODE> est en fait une monade, et Flatmap CODE> 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 code> code>, mais la valeur que vous avez déjà "enveloppée" dans une option code> code>, donc Flatmap code> vous permet d'économiser le débiteur avant d'appliquer la fonction. Par exemple. Si vous avez une option [mappe [k, v]]] code>, vous pouvez écrire MapOption.flatmap (_. Obtenir (touche)) code>. Si vous utilisez un simple mappe code> ici, vous obtiendrez une option [option [V]] code>, mais avec platmap code> vous obtenez un Option [v] code>. 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 em> monads). Li>
-
aplatissé code>: Si vous avez une valeur de type option [option [t]] code>, aplatiré code> active une option [T] code>. C'est la même chose que platmap (identité (_)) code>. Li>
-
orelse code>: Si vous avez plusieurs alternatives enveloppées dans l'option code> s, et que vous souhaitez que la première contienne réellement une valeur, vous pouvez chaîner ces alternatives avec orelse code>: steakoption.orelse (hamburgeroption) .Orelse (saladoption) code> li>
-
getorelse code>: Obtenez la valeur hors de l'option code> code>, mais spécifiez une valeur par défaut si elle est vide, E.G. Nomoption.Getorelse ("inconnu") code>. li>
-
foreach code>: faites quelque chose avec la valeur à l'intérieur, s'il existe. li>
-
ISdefinefiné code>, isempty code>: Déterminez si ce option code> contient une valeur. LI>
-
Forall code>, existe code>: tests si un prédicat donné contient pour la valeur. Forall code> est le même que option.map (test (_)). getorelse (true) code>, existe code> est identique, juste avec faux code> par défaut. li>
-
Tolist code>: surprise, il convertit l'option code> à une liste code>. li>
ul>