Elixir:将函数从模块传递给map函数

时间:2018-04-14 13:30:42

标签: elixir

我写了一个简单的map函数(用于学习目的;我了解Enum.map):

defmodule MyList do
    def add_1([]), do: []
    def add_1([head | tail]), do: [ head + 1 | add_1(tail)]

    def map([], _mapFn), do: []
    def map([head | tail], mapFn), do: [ mapFn.(head) | map(tail, mapFn) ]
end

我可以在iex中轻松使用它:

MyList.map [1,2,3], &(&1 + 1) 

而且,我正在使用匿名函数,所以没有惊喜。

如何使用模块本身的功能调用它?

iex(1)> MyList.map [1,2,3,4], MyList.add_1
** (UndefinedFunctionError) function MyList.add_1/0 is undefined or private. Did you mean one of:

      * add_1/1

    MyList.add_1()

我的意思是,毕竟这不是匿名的。

1 个答案:

答案 0 :(得分:0)

你需要在它前面放一个&,所以它传递了函数而不是试图调用它。

MyList.map [1,2,3,4], &MyList.add_1/1

注意{qualified}函数名前面的&和它后面的arity声明。