【问题标题】:Function as an argument in Erlang作为 Erlang 中的参数的函数
【发布时间】:2015-09-17 03:12:38
【问题描述】:

我正在尝试做这样的事情:

-module(count).
-export([main/0]).
        
sum(X, Sum) -> X + Sum.

main() ->
    lists:foldl(sum, 0, [1,2,3,4,5]).

但看到警告并且代码失败:

function sum/2 is unused

如何修复代码?

注意:这只是一个说明问题的示例,因此没有理由提出使用fun-expression 的解决方案。

【问题讨论】:

  • 请发布一个可以重现问题的独立且最小版本的模块。
  • 你能像lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4]).这样试试吗?因为我现在手头没有 erlang 解释器
  • @ZagoulkinDmitry ,你可以使用 ideone.com ,虽然不是那么方便。
  • 谢谢@Atomic_alarm!

标签: functional-programming erlang


【解决方案1】:

Erlang 有更明确的语法:

-module(count).
-export([main/0]).

sum(X, Sum) -> X + Sum.
main() ->
    lists:foldl(fun sum/2, 0, [1,2,3,4,5]).

另见“Learn you some Erlang”:

如果函数名没有参数列表,那么这些名称被解释为原子,原子不能是函数,所以调用失败。

...

这就是为什么必须在语言中添加新符号以便让您从模块外部传递函数的原因。这就是有趣的 Module:Function/Arity:它告诉 VM 使用该特定函数,然后将其绑定到一个变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多