下面的代碼顯示了我詢問的一個例子: 爲什麼Map,Enum等...不能在guard子句中或在我自己的宏中使用。爲什麼我們不能在Elixir guard子句或宏中使用其他函數?
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
這個問題的答案是相關的:https://stackoverflow.com/questions/11177109/can-i-make-my-own-guards-in-erlang – Dogbert
它是有道理的,因爲藥劑師和Erlang衛兵是相同的實現。 –