(BadArityError)为什么抛出错误?

时间:2015-11-18 10:29:59

标签: elixir

简单的灵丹妙药程序,用于分离奇数和偶数,然后打印出来。

iex(22)> c("testmap.ex") 
testmap.ex:1: warning: redefining module TestModule
[TestModule]

iex(23)> TestModule.test_map_reduce

** (BadArityError) #Function<0.56012634/2 in TestModule.pretty_print/1> with arity 2 called with 1 argument ({"even", [8, 6, 4, 2]})
    (elixir) lib/enum.ex:1047: anonymous fn/3 in Enum.map/2
    (stdlib) lists.erl:1262: :lists.foldl/3
    (elixir) lib/enum.ex:1047: Enum.map/2

请注意,它只显示地图的一部分,即

{"even", [8, 6, 4, 2]}

文件:testmap.ex

defmodule TestModule do
    def test_map_reduce do
        list = [1,2,3,4,5,6,7,8,9]
        map = Enum.reduce list, %{}, fn(n, acc) ->
            key = getKey(n)
            case acc[key] do
                nil -> Map.put acc, key, [n]
                list -> Map.put acc, key, [n|list]
            end
        end
        pretty_print(map)
    end
    def getKey(n) do
        case rem n, 2 do
            0 -> "even"
            _ -> "odd"
        end
    end
    def pretty_print(number_map) do
        Enum.map number_map, fn(k, v) ->
            IO.inspect k
            IO.inspect v
        end
    end
end

1 个答案:

答案 0 :(得分:3)

您将2个参数传递给传递给Enum.map/2的匿名函数 - 该函数应具有1的arity。

试试这个:

    Enum.map number_map, fn({k, v}) ->

{"even", [8, 6, 4, 2]}是2个元素的元组。