javascript – 了解Elm中的类型

尝试学习具有JS背景知识的Elm以及在强类型和静态类型语言方面的经验,我发现主要的难点在于类型语法(以及通常用于Elm的类型).不幸的是,我发现这些文档在这方面非常有用.

如果我在这里采用简单的例子:http://elm-lang.org/examples/buttons,行:

type Msg = Increment | Decrement

将联合类型Msg定义为“正在”递增或递减.它似乎表明增量和减量也是类型.它们究竟是什么? (它们未在示例中的其他位置定义,也不是预定义类型).

然后,它们在视图函数中用作onClick的参数.现在,它们似乎就像一种“信息”(无论那意味着什么).在JS中,这可能是通过在每种情况下为(可变)变量赋值来实现的 – 当然这不是Elm方式.那么,类型的工作方式是否与不变性主题相关?

视图功能

view model =
  div []
    [ button [ onClick Decrement ] [ text "-" ],div [] [ text (toString model) ],button [ onClick Increment ] [ text "+" ]
    ]

我认为这可能会打开一个更广泛的主题(如果有人可以指出有用的链接,谢谢!)但我的问题是:这里有什么增量和减量?它们如何适合Elm的类型系统?

最佳答案
增量和减量是数据构造函数.您可以将它们视为OO构造函数,它们可以具有参数,更重要的是,可以将它们区分开来.

你是对的,他们确实是一个信息;但由于它们没有参数,因此它们与枚举值没有区别.值不可变的事实与它几乎没有关系. C/C++ / Java也支持枚举.

在这种特定情况下,您甚至可以将Msg视为布尔值的精美名称.

Sum类型实际上大多数类似于C中的联合类型.区别在于它在Elm中存储了它的哪个选项. Elm从Haskell中获取这些概念.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...