无法为erlang模块中的变量分配乐趣

时间:2017-08-20 07:59:04

标签: erlang anonymous

我正在使用来自Programming with Erlang的示例代码。我很震惊。帮助我理解下面的代码出了什么问题。

-export([totalcost/1]).

Costeach = fun(X) -> {W,Q} = X, shop:cost(W)*Q end.
sum(H|T) -> H + sum[T];
sum([]) -> 0.
totalcost(L) -> sum(lists:map(Costeach,L)).

我想要实现的是能够将Variable(带有乐趣分配给它)作为参数映射。从这个模块中获得总成本

我不断收到语法错误/ Costeach未初始化错误。

1 个答案:

答案 0 :(得分:5)

您无法在顶层定义类似的功能。您有两种选择:使用您正在使用的语法,但在命名函数中声明它,或者将其声明为命名函数,并使用fun name/arity语法将其转换为匿名函数以传递给{{1 }}

第一种方法:

lists:map

第二种方法:

sum(H|T) -> H + sum[T];
sum([]) -> 0.
totalcost(L) ->
  Costeach = fun(X) -> {W,Q} = X, shop:cost(W)*Q end.
  sum(lists:map(Costeach,L)).

提示:在两种情况下都可以在函数参数中进行destructure以保存一行代码:

costeach(X) -> {W,Q} = X, shop:cost(W)*Q.
sum(H|T) -> H + sum[T];
sum([]) -> 0.
totalcost(L) -> sum(lists:map(fun costeach/1,L)).

Costeach = fun({W,Q}) -> shop:cost(W)*Q end.