Dog*_*Dog 3 erlang elixir rabbitmq
我是新手Erlang,但有一些经验Elixir。当我在尝试 RAFT ra的 RabbitMQ 实现时尝试学习 Erlang 时,我在 erlang 中遇到了一行Machine = {simple, fun erlang:'+'/2, 0},
Machine = {simple, fun erlang:'+'/2, 0},
Run Code Online (Sandbox Code Playgroud)
所以,在 中 {simple, fun erlang:'+'/2, 0},,这看起来像是在创建一个元组。元组中的第一项是atom命名的simple,下一个function和最后一个是integer:
{atom, function, integer}
Run Code Online (Sandbox Code Playgroud)
我不明白该函数fun erlang:'+'/2在这种情况下正在做什么。这/2意味着它应该需要 2 个参数。'+'只是一个加法运算符吗?如果是这样,这是一个简单的sum功能,我想太多了吗?erlang 文档说“如果原子不以小写字母开头或者包含字母数字字符、下划线 (_) 或 @ 以外的其他字符,则原子将用单引号 (') 括起来。”
在给定的上下文中,我看到这段代码,它指出State machine that implements the logic,这让我理解这个状态机是用atom命名的simple,执行加法,并将结果保存在元组的最后一项中。
是不是相当于&:erlang.+/2在丹药里做事?文档参考
任何背景都会真正有帮助。
你完全正确 - 这个函数只是加法运算符,并且它用单引号引起来,因为它不以小写字母开头。fun erlang:'+'/2相当于 Elixir 的&:erlang.+/2.
您可以使用函数语法而不是运算符语法来调用它:
> erlang:'+'(1,2).
3
Run Code Online (Sandbox Code Playgroud)
您可以将其用作高阶函数:
> lists:foldl(fun erlang:'+'/2, 0, [1, 2, 3]).
6
Run Code Online (Sandbox Code Playgroud)
(当然,您通常会使用lists:sum/1而不是后一个示例。)