2017-08-01 5 views
2

Elmのレコードのプロパティをインクリメントするにはどうすればよいですか?Elmのレコードプロパティをインクリメント

model : Model 
model = 
    { counter = 0 } 

そして、私は今、この

update : Msg -> Model -> Model 
update msg model = 
    case msg of 
    NoOp -> model 
    Increment -> { model | counter = model.counter + 1} 

のような更新に何かを持っているしたい場合、私は私も書くことができます知っている -

は、私はこのような単純なモデルを持っていること、のは、言ってみましょう私のインクリメントとして

Increment -> { model | counter = .counter model + 1 } 

しかし私は同じようにそれを行う方法がある場合は疑問に思っていますこれは愚かな質問がある場合は申し訳ありませんが、この

Increment -> { model | counter = counter + 1 } 

のようなこの

Increment -> { model | counter += 1} || Increment -> { model | counter++ } 

、あるいは何かに、私はちょうどエルムで始めていますし、いくつかの洞察をしたいと思います。

答えて

6

あなたの最初の例では、おそらくエルムでそれを行うための最も慣用的な方法である:

{ model | counter = model.counter + 1} 

他の言語であるようエルムには+=または++演算子はありません。 Elmが意図的に言語構文を小さくすることを選択することがよくあります。これらの演算子は学習曲線を増加させ、他の言語での使用が突然変異を意味するので、混乱を招く可能性があります。

{ model | counter = .counter model + 1 }の例は有効ですが、マッピングなどの関数として使用する場合は、通常、レコードフィールドをゲッターとしてのみ使用します。

-- This example would map a list of counter values from a list of models 
List.map .counter models 
+0

ありがとうございます! :) –

+0

言われているように、*私たちがハスケルからそれらを知っているようにレンズをエミュレートしようとするElmのライブラリの数は(* 'focus'など)*あります。 – SwiftsNamesake