iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 20
0
Modern Web

學會Elm寫前端系列 第 20

20 elm Q&A: 驚嘆號是什麼東西?

  • 分享至 

  • xImage
  •  

(!) bang,這是什麼鬼?

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


上一篇
19 讓elm看懂Markdown
下一篇
21 elm Q&A: 如何在elm取得此刻的時間?
系列文
學會Elm寫前端30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言