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

时间:2017-09-26 13:59:23

标签: syntax erlang

我偶然发现了一段我无法理解的代码。它看起来像这样:

% 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

3 个答案:

答案 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...