56 votes

Que signifie " ! []" syntaxe du code Elm dans Todomvc

Venant d'une réaction, j'apprends à comprendre Elm.

Dans le Exemple de code Todomvc il y a l'extrait de code suivant :

-- How we update our Model on a given Msg?
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
  case msg of
    NoOp ->
      model ! []        <-- What is this?

Ce que je (pense) comprendre, c'est que la update prend en compte un msg de type Msg et un model de type Model et renvoie un tuple de contenant un Model et un Cmd Msg .

Mais comment dois-je lire la déclaration de retour ?

model ! []

Que signifie cette déclaration ? Renvoyer une "liste vide de modèles [quelque chose]" ?
Ai-je manqué quelque chose dans la documentation où cela est expliqué ? (Googler "orme !" ne m'a pas mené bien loin :)

68voto

Chad Points 596

Mise à jour pour Elm 0.19

Elm 0.19 a supprimé l'opérateur point d'exclamation. Vous devez maintenant construire le tuple manuellement, comme dans (model, Cmd.none) .

Réponse originale pour Elm 0.18

Le point d'exclamation dans model ! [] est juste une fonction abrégée pour (model, Cmd.batch []) qui est le type renvoyé par la méthode typique update déclarations. Il est défini ici

1 votes

Merci de m'expliquer. Je suis tombé sur l'énigme (!) : model -> List (Cmd msg) -> (model, Cmd msg) mais je n'ai pas pu le traduire en model ! [] Espérons que d'autres docteurs suivront. Il s'agit d'un langage prometteur jusqu'à présent.

11 votes

C'est l'un des principaux problèmes de l'orme. Comment va-t-on chercher sur le web un point d'exclamation " !"? J'ai essayé de chercher une dizaine de variations de "point d'exclamation elm-lang". J'ai même cherché "point d'exclamation haskell". Pourquoi ne pouvons-nous pas écrire (model, Cmd.batch []) tel qu'il est ? Ça le rend beaucoup moins magique. Même si vous devez le rendre "moins cody", alors l'opérateur infixe avec un mot ne devrait-il pas être utilisé comme suit someOperator ? Juste quelques réflexions.

13 votes

Vous pouvez utiliser la recherche fantaisie des paquets Elm (aller à Paquets d'ormeaux et cliquez sur Recherche de fantaisie ) pour trouver de telles fonctions. Vous pouvez y effectuer des recherches sur ! et ça fait apparaître la bonne fonction.

7voto

Simon H Points 512

Notez que cette syntaxe disparaîtra dans la prochaine version d'Elm (0.19), alors ne prenez pas l'habitude de l'utiliser ;-)

Vous pouvez utiliser aujourd'hui, et avec 0.19 :

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
  case msg of
    NoOp ->
      (model, Cmd.none)

1 votes

Pourriez-vous nous proposer une alternative ?

2 votes

@Astrowie Au lieu de model ! [cmd1, cmd2] vous utilisez (model, Cmd.batch [cmd1, cmd2])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X