【发布时间】: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