我是一个新手,目前正在学习Elm。我来自JS / React,并且没有任何RFP的经验。
我在这里的指南中: http://guide.elm-lang.org/architecture/user_input/text_fields.html
我遇到问题的部分是update
和view
:
-- UPDATE
type Msg
= Change String
update : Msg -> Model -> Model
update msg model =
case msg of
Change newContent ->
{ model | content = newContent }
-- VIEW
view : Model -> Html Msg
view model =
div []
[ input [ placeholder "Text to reverse", onInput Change ] []
, div [] [ text (String.reverse model.content) ]
]
让我们从Msg声明开始。指南说:
它需要一个参数,这里是Change函数,在声明Msg类型时创建:
Change : String -> Msg
我不明白这里是怎么发生的:
type Msg
= Change String
我们在这里如何定义一个Change函数?我们如何定义该函数的工作方式?对我来说,看起来我们只是声明了Msg的类型,其中包含一些Change
以及String
类型。
我的第二个问题是关于更新的:
update : Msg -> Model -> Model
update msg model =
case msg of
Change newContent ->
{ model | content = newContent }
对我来说,这似乎是一个高阶函数“update”,它接受一个“Msg”并返回一个函数“Model-> Model”。但是我们定义了一个带有两个参数的函数。那么“Msg-> Model-> Model”只是表示除最后一部分外都是参数吗?
然后我们调用“Change”函数:
Change newContent ->
{ model | content = newContent }
我不理解的是箭头。通常,箭头会在参数定义之后出现。但是,在这里,我们在->
之前有一个函数的结果。
我希望我的问题有意义,我只是对这个(可能很棒的)语言感到非常困惑。