update msg model =
case msg of
FetchTime ->
model ! [ Task.perform Now Time.now ]
Now t ->
{ model | message = "The date is now " ++ (toString (Date.fromTime t)) } ! []
這是為了明天的主題而寫的,或是當你為了看其他人的elm code,會常常看到這個 ! []
WTF??
腦中滿滿的黑人問號,不太能理解為什麼會有一個驚嘆號呢?這個叫做bang,其實不少語言都常常用到,但是意義都不太一樣。在elm裡,到底是什麼意思呢?
你只好搜尋一下,終於發現在 Platform.cmd
裡:
(!) : model -> List (Cmd msg) -> (model, Cmd msg)
結果又出現更多看不懂的。不過至少這次你知道它要吃兩個parameter,一個是 model, 一個是 List (Cmd
msg),最後的結果是(model, Cmd msg),最後這個結果好像常常看到?
對啦,你常常在寫 main 裡頭的program有這個
program : { init : (model, Cmd msg), update : msg -> model -> (model, Cmd msg), subscriptions : model -> Sub msg, view : model -> Html msg } -> Program Never model msg
所以就是要讓 Elm architecture
裡的 update
可以給出(model, Cmd msg)啦。
所以如果是 ! []
就是給出(model, Cmd.none) ! [Task.perform Now Time.now]
就是給出
(model, Task.perform Now Time.now)
而infix function就是像 1 + 1
如果這個function 可以放在中間,在定義時要加上 ()
,所以像 (+)
,(!)
在定義時要加上 ()
Bang! And Other Infix Functions