Erlang 函数已经用保护子句定义

标签 erlang

编写一个递归函数,我想要一个 fn 在列表有元素时执行,另一个在列表为空时执行:

 transfer(Master, [H|Tail]) ->
  Master ! {transfer, H},
  transfer(Master, Tail).

transfer(_Master, []) ->
  nil.

我遇到的问题是 src/redis/redis_worker.erl:13: function transfer/2 already defined .我知道它对具有相同名称和数量的两个函数感到不安,但这两个应该不同。

最佳答案

问题是函数的子句需要用分号而不是句点分隔。

transfer(Master, [H|Tail]) ->
    Master ! {transfer, H},
    transfer(Master, Tail); % use semicolon here, not period

transfer(_Master, []) ->
    nil.

当您使用句点终止子句时,编译器认为该函数的定义是完整的,因此它将您的代码视为两个单独的函数,而不是同一函数的不同子句。

请参阅 Function Declaration Syntax 的 Erlang 引用更多细节。

关于Erlang 函数已经用保护子句定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12824959/

相关文章:

regex - 如何正确衡量正则表达式的性能?

erlang - 运行牛仔应用程序时出错

erlang - 如何展示 Erlang 编程机器人的有效性?

erlang - 在 Erlang 中跟踪从邮箱中消费消息的行为

erlang - 为什么erlang io是:format output being lost and what do I need to do to restore it?

concurrency - seda 和 actor 模型本质上是等价的吗?

erlang - 如何从命令行运行具有大于 1 的函数的 erlang 程序

functional-programming - Erlang 函数调用 - 为什么将 self() 作为直接参数调用不起作用?

function - erlang 改变一个有趣的环境

Erlang if 语句并返回 true