Elixir匿名函数作为函数参数

时间:2018-03-08 12:02:23

标签: elixir

尝试将自定义函数传递给以下函数,但我没有运气。

import numpy as np

def writeCFloat(f, ndarray):
    np.asarray(ndarray, dtype=np.float32).tofile(f)
def writeCInt(f, ndarray):
    np.asarray(ndarray, dtype=np.int32).tofile(f)
def writeC80(f, string):
    np.asarray(string, dtype='a80').tofile(f)

if __name__ == "__main__":
    f = open('test.out', mode='wb')
    ndarray = np.zeros((10000,10000))

    writeCInt(f, ndarray)
    writeCFloat(f, ndarray)
    writeC80(f, 'coordinates')

试着像这样打电话:

   defmodule M do
     def custom_fn([head|tail],fnce) do
        fnce.(head)
        custom_fn(tail,fnce)
      end

     def custom_fn([]), do: nil

   end

获取此

M.custom_fn([1,2,3], (fn(x) -> x * 10 end))

此外,以下消息说明了什么? M.custom_fn / 2
更具体地说,我不理解 / 2

3 个答案:

答案 0 :(得分:2)

您忘记将第二个参数添加到基本案例中。就像错误所说的那样,现在你没有任何符合([], <function>)的条款。

def custom_fn([]), do: nil

应该是

def custom_fn([], _), do: nil

答案 1 :(得分:2)

/2function arity

问题根本不在于功能。

def custom_fn([head|tail],fnce) do
  fnce.(head)
  # ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓ HERE
  custom_fn(tail,fnce)
end

空数组的最后一次调用不匹配。您应该更新第二个子句以接受第二个参数:

def custom_fn([], _), do: nil

答案 2 :(得分:2)

正如其他答案给出的解释一样,我会给出正确的版本。

defmodule M do
  def custom_fn([], _), do: nil
  def custom_fn([head|tail],fnce) do
    fnce.(head)
    custom_fn(tail,fnce)
  end
end

IO.inspect M.custom_fn([1,2,3], (fn(x) -> x * 10 end))