我偶然发现了一段我无法理解的代码。它看起来像这样:
% 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"模块中定义的原子?我真的不能理解这一部分。
我尝试理解它是这样的:我们将元素保存在第一个元素描述内容的元组中。例如:{celsius, 55}
。不太清楚的是原子消息没有在模块中定义。你必须定义它吗?不需要声明,所以我猜你在使用它之前不必定义原子。我对么?
感谢您的帮助!
代码来自here。
答案 0 :(得分:3)
正确 - 你只需随意使用原子。他们没有"定义"任何地方。
答案 1 :(得分:0)
原子可以随意使用,每个独特的原子都会被输入到原子表中。原子表永远不会被垃圾收集。 ERTS实例的默认最大原子数为1048576.启动时使用+ t选项可以增加此限制。 more information regarding limits。出于诊断目的,您可以使用erlang:memory(atom) - elrang:memory(atom_used)调用,以确保您没有用尽可用的原子。如果原子耗尽,则会在没有警告的情况下立即终止ERTS。
答案 2 :(得分:0)
基本上,你明白了。你可以使用你想要的所有原子,它们不是在任何地方定义的。除了一些"特殊词"二郎:
receive, case, if, throw, catch, else...