gpt4 book ai didi

elm - "Program is a type parameterized by three type variables: flags, model, and msg"在 Elm 语言中是什么意思?

转载 作者:行者123 更新时间:2023-12-04 19:34:25 26 4
gpt4 key购买 nike

我正在学习 Elm,通过阅读费尔类克 (https://pragprog.com/book/jfelm/programming-elm) 的“Programming Elm”,并经历了与发布 what does the elm signature mean in "Program Never Model Msg"? 的人相同的一些成长痛苦。 --@dogbert 的回复指出

Program is a type parameterized by three type variables

这到底是什么意思?是不是说Program是一个函数,它的参数类型是三个类型变量?

这样

main: Program () {something: string} msg

Program 只接受空标志、具有给定类型的模型和 msg?

(顺便问一下,main的类型在这个上下文中是什么意思?也就是说,它是一个Program类型的函数?)

《用 Elm 编程》这本书的好处在于它能让你快速上手,但不太好的地方在于它介绍了一些东西——比如上面的内容——而没有详细说明什么是,确切地说,他们的意思。我想我应该从阅读 elm 网站上的教程开始,这是我的下一个目的地。但我们将不胜感激。

最佳答案

Program 是一种类型。这意味着我们可以拥有 Program 类型的值,例如

main: Program () {something: String} msg
main =
Browser.sandbox { init = init, update = update, view = view }

在 Elm 中,main 不是函数。相反,它通常提供几个函数供运行时调用:

  • 首先,运行时调用 init,传入任何标志并初始化模型。
  • 然后它调用 view,将模型作为参数传递,生成要显示的 HTML。
  • 每当您的程序需要对某事使用react(例如,像按钮单击之类的事件)时,运行时都会调用 update 并使用当前模型和一条指示发生了什么的消息。 update 返回一个新模型,运行时相应更新其状态,然后调用 view 更新 DOM。

并非所有 Elm 程序都需要所有这些,并且可能还有其他的(如订阅),但要点是,当你的程序运行时,而不是只有一个 main 函数(与许多其他语言一样),Elm 程序依靠 Elm 运行时来管理它们的生命周期。

现在更多关于 Program 类型的参数(称为类型变量)。习惯 Elm 作为一种纯函数式语言处理类型的方式需要一些时间。

也许 List a 类型是一个更相关的例子。 Elm 的列表只能包含相同类型的元素。此类型被指定为 aList 的参数,因此编译器可以验证我们不会在其中放入任何其他内容。

所以你可以有一个 List StringList Int 类型的值:

messages : List String
messages =
["Hello!", "Goodbye"]

primes : List Int
primes =
[2, 3, 5, 7]

同样,Program 被参数化以指定它接受的标志、模型和消息的种类。这样,Elm 编译器可以验证 main 函数中给出的 viewupdate 等是否按照它们应有的方式运行参数和返回类型,Elm 运行时可以确保它向您的程序传递正确的参数(例如标志)。

阅读有关类型变量的更多信息 here .

关于elm - "Program is a type parameterized by three type variables: flags, model, and msg"在 Elm 语言中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58711198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com