値、そしてそれはかなり難しい:)エルム:リストでレコードを投入すると、エルムを学ぼうと
私が達成しようとしているもの:
私は、キーの数を持つレコードのモデルを持っています値のペア。私はそれらのキーに文字列のリストから値を入力したい。
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
}
このプログラムは、プリントアウトし:
{ one = "foo", two = "bar", three = "baz" }
私はつらい時、このコードは以下の繰り返しとについて推論しやすいようにする方法を考え出すを持っていると思います。モデルにすべて20個のキーが必要な場合はどうなりますか?上記のコードはかなり狂気になるでしょう。
@。ビットを詳しく説明する:Elmでは、レコードは実際に反復することを意図していません。通常、あなたのコードがElmで実際に長時間待たされるとき、それは他の何かが起こっているというサイン(おそらく別のタイプ)です。 Elmの 'Dict'タイプを見てみる価値はあります。モデルの中の1つを使用すると、作業が楽になる場合があります。 – wintvelt