【发布时间】:2016-11-04 15:31:21
【问题描述】:
这更像是一个理论问题,但我觉得必须有办法做到这一点。
我有 JS 组件,当它们被创建时,它们需要为一个 html 元素分配一个唯一的 id,这个 id 没有在任何其他组件中使用过。这通常很简单:
let currentId = 0;
function getNextId() {
currentId += 1;
return currentId;
}
function MyComponent() {
this.id = getNextId();
// Code which uses id
}
let c1 = new MyComponent();
// c1.id === 1
let c2 = new MyComponent();
// c2.id === 2
我想知道是否有任何方法可以只使用纯函数来做这种事情,因为我正试图围绕一些更高级的纯函数想法。据我所知,这需要 Monads 或类似的东西来完成,但我不知道该怎么做。
谢谢!
【问题讨论】:
-
全局状态通过以下方式模拟:1) 将状态作为附加参数传递给每 2) 将(可能更新的)状态作为附加返回值返回,以及 3) 确保状态的所有消费者都是正确排序,以便将一个函数的更新状态传递给下一个函数。在 Haskell 中,这是由
Statemonad 封装的。 -
@chepner 这几乎是一个答案。
-
嘿@chepner!谢谢(你的)信息!您能否提供一个 StackOverflow 答案,或许可以使用我上面给出的示例在实践中展示这个想法?如果你这样做并且它有效,我很乐意接受答案!
-
相关:“concurrent-supply”包提供了可拆分标识符生成器,可用于处理多线程的更高级场景:hackage.haskell.org/package/concurrent-supply
标签: javascript haskell functional-programming purely-functional