gpt4 book ai didi

Elm:邮箱是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 18:37:56 27 4
gpt4 key购买 nike

假设我创建了一个 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} 的别名,是不是因为,在elm中,某个类型只有一个信号,所以在上面的场景中,我不用告诉elm绑定(bind)mailbox.signalmailbox.address , elm 会因为某种类型的地址和信号一一对应而自己弄清楚吗?

最佳答案

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

创建邮箱是必要的、有效的操作(嘘,不要告诉任何人)。因此,如果您使用:

mailbox1 = Signal.mailbox Blah
mailbox2 = Signal.mailbox Blah

这两个邮箱将是不同的。给 mailbox2.address发消息将在 mailbox2.signal 上生成一条消息但不是 mailbox1.signal .这破坏了引用透明度,这很糟糕,但目前它并没有破坏一切。 (这可能太过分了,但是因为你需要 Signal 用于输出并且不能有 Signal (Signal something) ,实际上邮箱创建的非托管效果并没有把事情搞砸)。这种“泄漏”将在 future 的某个时候得到解决。已经有一个提案,但是在不同版本的语言中发生了很大的变化。

关于Elm:邮箱是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31353005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com