Erlang -帮助理解基本的Erlang代码

eblbsuwk  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(188)

我无意中发现了一段代码,但我不太理解。它看起来像这样:

% spawn process which waits for a message and prints it
Pid = spawn(fun() ->
  receive
    X -> io:fwrite("I received: ~p~n", [X])
  end
end),
% send a message to the new process
Pid ! {message, "Hello"}.

在最后一行中,“message”是模块中定义的原子吗?我真的不能理解这部分。
我试图理解它会是这样的:我们将内容保存在元组中,其中第一个元素是内容的描述。2例如:{celsius, 55}.不太清楚的是atom消息没有在模块中定义,是否一定要定义?不需要声明,所以我猜在使用atom之前不需要定义它,对吗?
谢谢你的帮助!
代码来自here

uinbv5nw

uinbv5nw1#

正确--你只是随意使用原子,它们在任何地方都没有“定义”。

enyaitl3

enyaitl32#

基本上,你理解的对。你可以使用任何你想要的原子,它们没有在任何地方定义。除了一些Erlang中的保留字:

receive, case, if, throw, catch, else...
bxfogqkk

bxfogqkk3#

原子可以随意使用,每个唯一的原子都将被输入到原子表中。原子表从不进行垃圾收集。Erts示例的默认最大原子计数为1048576。可以通过在启动时使用+t选项来增加此限制。more information regarding limits。出于诊断目的,您可以使用erlang:memory(atom)- elrang:memory(atom_used)调用,以确保您没有用完可用的原子。如果原子用完,则会导致ERTS立即终止,而不发出警告。

相关问题