我无意中发现了一段代码,但我不太理解。它看起来像这样:
% 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。
3条答案
按热度按时间uinbv5nw1#
正确--你只是随意使用原子,它们在任何地方都没有“定义”。
enyaitl32#
基本上,你理解的对。你可以使用任何你想要的原子,它们没有在任何地方定义。除了一些Erlang中的保留字:
bxfogqkk3#
原子可以随意使用,每个唯一的原子都将被输入到原子表中。原子表从不进行垃圾收集。Erts示例的默认最大原子计数为1048576。可以通过在启动时使用+t选项来增加此限制。more information regarding limits。出于诊断目的,您可以使用erlang:memory(atom)- elrang:memory(atom_used)调用,以确保您没有用完可用的原子。如果原子用完,则会导致ERTS立即终止,而不发出警告。