2016-06-03 23 views
3

Ich folge dem Elm-Tutorial Random und ich blieb stecken, versuchen, zwei Würfel zusammen zu laufen.Generieren eines Befehls mit einer Nachricht mit mehr als einer Argumente in Elm

modifizierte ich die Nachricht zwei Zahlen zu liefern:

type Msg 
    = Roll 
    | NewFace Int Int 

dann brauche ich den Befehl zu erzeugen, die die Nachricht in der Funktion Update senden:

(model, Random.generate NewFace (Random.int 1 6)) 

das Problem ist, dass mit dieses Konstrukt schlägt fehl:

-- error: Function `generate` is expecting 2 arguments, but was given 3. 
(model, Random.generate NewFace (Random.int 1 6) (Random.int 1 6)) 

Zuerst versuchte ich das letzte Argument mit Klammern gruppieren:

-- same error as before plus: 
-- The type annotation is saying: 
--  Msg -> Model -> (Model, Cmd Msg) 
-- But I am inferring that the definition has this type: 
--  Msg -> Model -> (Model, Cmd (Int -> Msg)) 
(model, Random.generate NewFace ((Random.int 1 6) (Random.int 1 6))) 

Dann fand ich, dass es eine Random.pair Funktion ist:

-- still complaining about update's signature and moreover 
-- Function `generate` is expecting the 2nd argument to be: 
-- Random.Generator Int 
-- But it is: 
-- Random.Generator (Int, Int) 

(model, Random.generate NewFace (Random.pair (Random.int 1 6) (Random.int 1 6))) 

Ich bin sicher, ich bin etwas fehlt trivial, wenn meine ist erster Tag mit Elm und wird herausfordernd.

Dank

Antwort

7

Random.pair erzeugt ein Tupel, so dass Ihre NewFace Nachricht ein Tupel als Parameter akzeptieren. Versuchen Sie es zu diesem Wechsel:

type Msg 
    = Roll 
    | NewFace (Int, Int) 
+0

großen Mann! Ich musste auch die 'update' Funktion ändern, die das Tupel verwaltet. Danke vielmals! – pietro909