【发布时间】:2017-06-10 03:59:22
【问题描述】:
下面的代码显示了我所询问的示例: 为什么 Map、Enum 等...不能在保护子句或我自己的宏中使用。
defmodule GuardMod do
defmacro has_any_key(arg, keys) do
quote do
Map.keys(unquote(arg), unquote(keys)) |> Enum.any?
end
end
end
defmodule OtherMod do
import GuardMod
@doc """
has_any_key/2 is allowed, but Map.keys or Map.any not
"""
def fn1(list) when has_any_key(list, [:key1, :key2]), do: :nothing
end
【问题讨论】:
-
这个问题的答案是相关的:stackoverflow.com/questions/11177109/…
-
这是有道理的,因为 Elixir 和 Erlang 守卫是相同的实现。
标签: elixir