gpt4 book ai didi

erlang - Erlang原子简单解释

转载 作者:行者123 更新时间:2023-12-02 03:35:35 27 4
gpt4 key购买 nike

我正在学习 Erlang,并试图理解原子的概念。我了解Python:用简单的术语或与Python类似的方式对这些“原子”有什么好的解释。到目前为止,我的理解是类型就像字符串但没有字符串操作?

最佳答案

Docs 说:

An atom is a literal, a constant with name.

有时您有几个选项可供选择。例如,在 C 中,您有 enum:

enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };

在 C 中,它实际上是一个整数,但您可以在代码中将它用作选项之一。 Erlang 中的原子在模式匹配中非常有用。让我们考虑非常简单的服务器:

loop() ->
receive
{request_type_1, Request} ->
handle_request_1(Request),
loop();
{request_type_2, Request} ->
handle_request_2(Request),
loop();
{stop, Reason} ->
{ok, Reason};
_ ->
{error, bad_request}
end.

您的服务器接收消息,这些消息是两个元素元组,并使用原子来区分不同类型的请求:request_type_1request_type_2stop 。这称为模式匹配。

服务器也使用原子作为返回值。 ok 原子意味着一切顺利。 _ 匹配所有内容,因此,如果该简单服务器收到意外情况,它会以元组 {error, Reason} 退出,其中原因也是原子 bad_request.

bool 值truefalse也是原子。您可以使用如下函数子句构建逻辑函数:

and(true, true) ->
true;
and(_, _) ->
false.

or(false, false) ->
false;
or(_, _) ->
true.

(这有点过于简单化了,因为你可以这样调用它:or(atom1,atom2),它会返回true,但它仅适用于插图。)

Erlang 中的模块名称也是原子,因此您可以将模块名称绑定(bind)到变量并调用它,例如在 Erlang shell 中键入:

io:format("asdf").
Variable = io.
Variable:format("asdf").

您不应该将原子用作字符串,因为它们不会被垃圾收集。如果您开始动态创建它们,则可能会耗尽内存。仅当有固定数量的选项且您手动输入代码时才应使用它们。当然,您可以根据需要多次使用同一个原子,因为它始终指向内存中的同一点(原子表)。

它们比 C 枚举更好,因为其值在运行时是已知的。因此,在调试 C 代码时,您会在调试器中看到 1 而不是 Tuesday。使用原子就没有这个缺点,您将在代码和 Erlang shell 中看到 tuesday

关于erlang - Erlang原子简单解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667647/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com