假设我使用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
,因为地址和某种类型的信号之间存在一对一的关系,榆树会弄明白吗?
答案 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
,所以实际上邮箱创建的非托管效果并没有搞乱。这种“泄漏”将在未来的某个时刻得到修复。已有提案,但在不同版本的语言中进行了重大更改。