2016-06-07 14 views
1

Ich bin nur mit Elm anfangen, so schön :)Einstellwerte in aliased Aufzeichnungen

Im "Random" example of the official Elm Guide das Modell mit dem Wert 1 wie folgt initialisiert zu werden scheint:

type alias Model = 
    { dieFace : Int 
    } 


init : (Model, Cmd Msg) 
init = 
(Model 1, Cmd.none) 

Meine Verständnis dafür ist, dass der Code

den Wert des DieFace-Attributs im Datensatz setzt. Ist das richtig und wenn ja: Was ist diese seltsame Syntax für das Setzen des Attributs eines Datensatzes? Ich hätte etwas entlang der Linien von

{ model | dieFace = 1 } 

Antwort

5

Model ist eine Art Alias ​​für einen Datensatz zu erwarten, die einen einzelnen int-Wert dieFace genannt hat.

Es gibt ein paar Möglichkeiten, um einen Wert dieses Typs zu erstellen:

Model 1 -- treats Model as a function with a single parameter 

{ dieFace = 1 } -- creates a record that happens to coincide with the Model alias 

Die seltsame Syntax, die Sie in { model | dieFace = 1 } sehen Kurz Hand ist, einen neuen Wert für die Erstellung eines bestehenden Rekordwert basiert weg, aber zu ändern ein oder mehrere Felder. Es macht vielleicht nicht viel Sinn, wenn Ihre Satzart ein einzelnes Feld hat also lassen Sie uns ein willkürliches Beispiel erstellen:

type alias ColoredDie = { dieFace: Int, color: String } 

Sie können in der Elm REPL rumspielen und vielleicht wird dies dazu beitragen, es Sinn machen:

> blue3 = ColoredDie 3 "blue" 
{ dieFace = 3, color = "blue" } : Repl.ColoredDie 
> red3 = { blue3 | color = "red" } 
{ dieFace = 3, color = "red" } : { dieFace : Int, color : String } 
> red4 = { red3 | dieFace = 4 } 
{ dieFace = 4, color = "red" } : { color : String, dieFace : number } 
> green6 = { red4 | color = "green", dieFace = 6 } 
{ dieFace = 6, color = "green" } : { color : String, dieFace : number } 

Sie können read up on Elm's record syntax here.

+0

Dank Tschad, beste Antwort, die ich seit langer Zeit bekam, und sehr schnell. – swelet