【问题标题】:making sense of what appears to be putting a type into a function in ReasonML: a styling convention or a syntax sugar?理解在 ReasonML 中将类型放入函数的意义:样式约定还是语法糖?
【发布时间】:2018-03-15 19:01:26
【问题描述】:

我正在尝试学习 ReasonML,并在 the source of Reason React Hacker News (src/CommentList.re) 中遇到了这一行:

type action =
  | Toggle(option(string));

action 的下一次出现在函数reducer 中作为参数:

reducer: (action, state) =>
  switch action {
  | Toggle(commentId) =>
    ReasonReact.Update({
      collapsed_comments: toggleComment(state.collapsed_comments, commentId)
    })
  }

我已经查看了docs,但没有看到任何关于这种结构或做法的提及(也许我错过了?)。这是否只是一种样式约定,让参数和类型共享相同的名称,然后依靠类型推断将参数action 与类型action 匹配?还是这里有某种语法糖?

为什么不通过明确命名类型actionType 来减少混淆呢?或者,在 Reason 社区中,让类型和参数同名的行为是某种新兴的风格约定?

【问题讨论】:

  • 类型和值存在于不同的命名空间中,因此相同的名称不会引起冲突。在阅读代码时,您会根据上下文将它们作为一种或另一种进行解析。这是 OCaml 中的一个旧约定,您会经常看到类似 let f(int) = int + 1; 的代码
  • @Yawar 我明白了!谢谢。所以它是某种 OCaml 工件!

标签: types reason reason-react


【解决方案1】:

来自ReasonReact docs

有一个用户定义的类型叫做 action,按照约定命名。它是组件中所有可能的状态转换的变体。

因此,如果您愿意,可以将其重命名为 actionType(我认为这可能更清楚)。 reducer 中的类型是推断出来的,不依赖于类型名称。

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2016-09-09
    • 2020-02-16
    • 2016-07-25
    相关资源
    最近更新 更多