【问题标题】:Erlang - Help in understanding basic erlang codeErlang - 帮助理解基本的 Erlang 代码
【发布时间】:2020-09-01 21:53:33
【问题描述】:

我偶然发现了一段我不太明白的代码。它看起来像这样:

% 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"}.

在最后一行,“消息”是在模块中定义的原子吗?我真的无法理解那部分。

我试图理解它是这样的:我们将内容保存在第一个元素描述内容的元组中。例如:{celsius, 55}。不太清楚的是原子消息没有在模块中定义。你必须定义它吗?不需要声明,所以我想您不必在使用之前定义原子。我对么?

感谢您的帮助!

代码来自here

【问题讨论】:

  • 是的。一般来说,原子是文字。遇到时它们会被添加到原子表中。像使用另一种支持 GC 的语言中的字符串文字一样使用它们。在erl中运行代码看看!它比在这里发帖有趣得多。

标签: syntax erlang


【解决方案1】:

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

【讨论】:

【解决方案2】:

基本上,您理解正确。你可以使用任何你想要的原子,它们没有在任何地方定义。除了 Erlang 中的一些 reserved words

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-25
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 2014-11-09
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多