Elm versuchen zu lernen, und es ist ziemlich schwer :)Elm: ein Datensatz mit Liste bevölkern Werte
Was ich versuche zu erreichen: ein Modell
Ich habe das mit einer Reihe von Schlüsseln ein Rekord ist Wertpaare. Ich möchte diese Schlüssel mit Werten aus einer Liste von Zeichenfolgen füllen.
module Main exposing (..)
import List
import Html exposing (Html, program, div, text)
type alias Model =
{ one: String
, two: String
, three: String
}
fakeData: List String
fakeData = ["foo", "bar", "baz", "bad", "baf"]
populate: Model -> List String -> Model
populate model data =
case List.head data of
Just str ->
case model.one of
"" ->
let updatedModel =
{ model | one = str }
in
case List.tail data of
Just items ->
populate updatedModel items
Nothing ->
model
_ ->
case model.two of
"" ->
let updatedModel =
{ model | two = str }
in
case List.tail data of
Just items ->
populate updatedModel items
Nothing ->
model
_ ->
case model.three of
"" ->
let updatedModel =
{ model | three = str }
in
case List.tail data of
Just items ->
populate updatedModel items
Nothing ->
model
_ ->
model
Nothing ->
model
init: (Model, Cmd Msg)
init =
(populate { one = "", two = "", three = "" } fakeData, Cmd.none)
type Msg =
NoOp
view: Model -> Html Msg
view model =
div []
[ text (toString model) ]
update: Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
NoOp ->
(model, Cmd.none)
subscriptions: Model -> Sub Msg
subscriptions model =
Sub.none
main: Program Never Model Msg
main =
program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
Dieses Programm druckt:
{ one = "foo", two = "bar", three = "baz" }
Ich glaube, ich eine harte Zeit, herauszufinden, wie dieser Code machen weniger repetitive und einfacher über die Vernunft. Was passiert, wenn ich 20 Schlüssel im Modell habe, die alle ausgefüllt werden müssen? Der obige Code würde ziemlich verrückt werden.
@ chadgilbert Antwort (wie immer) ist sehr gut. Um es etwas genauer auszudrücken: In Elm sind Datensätze nicht wirklich zum Iterieren gedacht. In der Regel, wenn Ihr Code in Elm wirklich langgezogen wird, ist dies ein Zeichen, dass etwas anderes vorgeht (vielleicht ein anderer Typ). Es lohnt sich, den "Dict" -Typ in Elm zu betrachten. Die Verwendung eines solchen in Ihrem Modell kann die Arbeit erleichtern. – wintvelt