榆树:邮箱是如何工作的?

时间:2015-07-11 03:04:20

标签: elm

假设我使用Mailbox创建mailbox = Signal.mailbox Action,其中type Action = Blah,稍后我可以使用mailbox向此Signal.send mailbox.address Blah发送操作,这样我就可以听在mailbox.signal,怎么会这样?我的意思是,毕竟类型Mailbox只是{address : Signal.Address Action, signal : Signal.Signal Action}的别名,是因为在榆树中,某种类型只有一个信号,所以在上面的场景中,我不知道我必须告诉榆树用mailbox.signal绑定mailbox.address,因为地址和某种类型的信号之间存在一对一的关系,榆树会弄明白吗?

1 个答案:

答案 0 :(得分:6)

邮箱将您发送给它的事件放入其信号的能力完全基于“魔术”,即它是本机实现的(在JavaScript中)而不是您自己可以实现的。这就是为什么它是标准库中的内置。

创建邮箱是一项势在必行,有效的行动(嘘,不要告诉任何人)。所以如果你使用:

Show In Finder

这两个邮箱将是截然不同的。向for (var i = 0; i < arr.length; i++) { for (var prop in object) { if (object.hasOwnProperty(prop)) { if (arr[i][prop] === 'John') { arr[i][prop] = 'Johnson'; } } } } 发送消息将在mailbox1 = Signal.mailbox Blah mailbox2 = Signal.mailbox Blah 上生成一条消息,但不会生成mailbox2.address消息。这打破了参考透明度,这很糟糕,但现在它并没有打破一切。 (这可能与切线相差太远,但是因为输出需要mailbox2.signal而不能拥有mailbox1.signal,所以实际上邮箱创建的非托管效果并没有搞乱。这种“泄漏”将在未来的某个时刻得到修复。已有提案,但在不同版本的语言中进行了重大更改。