gpt4 book ai didi

Erlang:向模块发送消息?

转载 作者:行者123 更新时间:2023-12-01 01:12:11 26 4
gpt4 key购买 nike

我正在阅读 this “Learn you some Erlang”中的部分,有一段代码如下所示:

start() ->
register(?MODULE, Pid=spawn(?MODULE, init, [])),
Pid.

start_link() ->
register(?MODULE, Pid=spawn_link(?MODULE, init, [])),
Pid.

terminate() ->
?MODULE ! shutdown.

我对 terminate 感到非常困惑功能。那是说向模块本身发送消息吗?这是如何运作的?这是怎么回事?

最佳答案

TL;DR:关机被发送到一个进程,而不是模块。
?MODULE是一个值,在编译时更改为当前模块(文件)的名称。

此代码示例中具体发生的情况是,正在生成的进程正在以模块名称向 VM 注册,以便其他进程可以通过这种方式引用它。您可以替换 ?MODULE在几乎任何原子的整个代码块中,只要您每次都给出相同的值。

所以当terminate()被调用时,关闭消息不会发送到模块,而是发送到生成并以该名称向 VM 注册的进程。

使用 ?MODULE只是一种避免与其他注册进程命名冲突的便捷方法。

关于Erlang:向模块发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14801849/

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