参数,Html复选框接受榆树

parameters, Html checkbox takes in elm

这是取自 elm 复选框的视图片段 examples -

view address model =
  div [] <|
    span [toStyle model] [text "Hello, how are yo?"]
    :: br [] []
    :: checkbox address model.red Red "red"
    ++ checkbox address model.underline Underline "underline"
    ++ checkbox address model.bold Bold "bold"

checkbox : Address Action -> Bool -> (Bool -> Action) -> String -> List Html
checkbox address isChecked tag name =
  [ input
      [ type' "checkbox"
      , checked isChecked
      , on "change" targetChecked (Signal.message address << tag)
      ]
      []
  , text name
  , br [] []
  ]

1) 我明白了,double colonsdouble plus 是用来连接列表的?它们之间有何不同?

2) 在checkbox这一行的函数中,(Signal.message address << tag)tag解绑到什么?是 Red(或)red?这个参数有什么用?

3) address 函数接受的参数类型是什么?

回答

  1. 双冒号(::) 将单个元素添加到列表的开头。
    双加 (++) 连接两个列表。
  2. 当从 checkbox address model.red Red "red" 调用 checkbox 时,
  3. tag 将等于 RedRed 是从 BoolAction 的函数。它将复选框的事件包装在此数据构造函数中,以便稍后在 update 函数中,您可以将该复选框的事件与其他复选框的事件区分开来。
  4. address 不是函数。它的类型为 Address Action,这意味着它包含可以接收 Action 消息的邮箱地址。这个 "mailbox" 在代码中是不可见的,它被 StartApp 内部使用,它在 main 函数中使用。

代码参考

即使链接示例发生变化,为了让这个问题有用,这些是我所指的相关代码部分:

update函数:

update action model =
  case action of
    Red bool ->
        { model | red <- bool }

    Underline bool ->
        { model | underline <- bool }

    Bold bool ->
        { model | bold <- bool }

Action类型:

type Action
  = Red Bool
  | Underline Bool
  | Bold Bool

main函数:

main =
  StartApp.start { model = initialModel, view = view, update = update }