在 erlang 中,我如何解释 `fun erlang:'+'/2` 中的 `+` 运算符
In erlang, how do I interpret the `+` operator in `fun erlang:'+'/2`
我是 Erlang
的新手,但对 Elixir
有一些经验。由于我在尝试使用 RAFT 的 RabbitMQ 实现的同时尝试学习 Erlang,ra, I've come across a line in erlang Machine = {simple, fun erlang:'+'/2, 0},
Machine = {simple, fun erlang:'+'/2, 0},
因此,在 {simple, fun erlang:'+'/2, 0},
中,这看起来像是在创建一个元组。元组中的第一项是名为 simple
的 atom
,下一个是 function
,最后一个是 integer
:
{atom, function, integer}
我不明白 fun erlang:'+'/2
函数在这种情况下的作用。 /2
意味着它应该有 2 个参数。 '+'
只是一个加法运算符吗?如果是这样,这是一个简单的 sum
函数吗?我想多了? erlang 文档说 "An atom is to be enclosed in single quotes (') if it does not begin with a lower-case letter or if it contains other characters than alphanumeric characters, underscore (_), or @."
在给定的 context 中,我看到这段代码,它声明 State machine that implements the logic
,这让我理解这个状态机是用原子 simple
命名的,执行加法,并将结果保存在元组的最后一项中。
是否相当于在灵药中做&:erlang.+/2
? Doc Reference
任何上下文都会很有帮助。
你完全正确 - 这个函数只是加法运算符,它用单引号括起来,因为它不是以小写字母开头。 fun erlang:'+'/2
相当于 Elixir 的 &:erlang.+/2
.
您可以使用函数语法而不是运算符语法来调用它:
> erlang:'+'(1,2).
3
并且您可以将其用作高阶函数:
> lists:foldl(fun erlang:'+'/2, 0, [1, 2, 3]).
6
(当然,您通常会使用 lists:sum/1
而不是后一个示例。)
根据 Erlang 文档,这种特殊用法是指定 Fun expression 的一种形式,而这种形式是 fun Module:Name/Arity
。
我是 Erlang
的新手,但对 Elixir
有一些经验。由于我在尝试使用 RAFT 的 RabbitMQ 实现的同时尝试学习 Erlang,ra, I've come across a line in erlang Machine = {simple, fun erlang:'+'/2, 0},
Machine = {simple, fun erlang:'+'/2, 0},
因此,在 {simple, fun erlang:'+'/2, 0},
中,这看起来像是在创建一个元组。元组中的第一项是名为 simple
的 atom
,下一个是 function
,最后一个是 integer
:
{atom, function, integer}
我不明白 fun erlang:'+'/2
函数在这种情况下的作用。 /2
意味着它应该有 2 个参数。 '+'
只是一个加法运算符吗?如果是这样,这是一个简单的 sum
函数吗?我想多了? erlang 文档说 "An atom is to be enclosed in single quotes (') if it does not begin with a lower-case letter or if it contains other characters than alphanumeric characters, underscore (_), or @."
在给定的 context 中,我看到这段代码,它声明 State machine that implements the logic
,这让我理解这个状态机是用原子 simple
命名的,执行加法,并将结果保存在元组的最后一项中。
是否相当于在灵药中做&:erlang.+/2
? Doc Reference
任何上下文都会很有帮助。
你完全正确 - 这个函数只是加法运算符,它用单引号括起来,因为它不是以小写字母开头。 fun erlang:'+'/2
相当于 Elixir 的 &:erlang.+/2
.
您可以使用函数语法而不是运算符语法来调用它:
> erlang:'+'(1,2).
3
并且您可以将其用作高阶函数:
> lists:foldl(fun erlang:'+'/2, 0, [1, 2, 3]).
6
(当然,您通常会使用 lists:sum/1
而不是后一个示例。)
根据 Erlang 文档,这种特殊用法是指定 Fun expression 的一种形式,而这种形式是 fun Module:Name/Arity
。