in
运算符如何使用地图?
iex(12)> "a" in %{"a" => "b"}
false
iex(13)> "b" in %{"a" => "b"}
false
iex(14)> {"a", "b"} in %{"a" => "b"}
true
iex(15)> {"a", "a"} in %{"a" => "b"}
false
如果仅对表示键和值的元组返回true,为什么它不会在前两次调用中引发错误?
答案 0 :(得分:5)
如果您查看in/2的文档,请说明:
此运算符(它是一个宏)只是转换为对Enum.member?/ 2的调用。
Enum.member?/2适用于任何Enumberable。
地图的可枚举协议需要 The implementation of member?/2
:
def member?(map, {key, value}) do
{:ok, match?({:ok, ^value}, :maps.find(key, map))}
end
def member?(_map, _other) do
{:ok, false}
end
您可以使用以下代码查看其他地图实例转换为Enumerable协议的元组:
iex(4)> Enum.map(%{"a" => "b", 1 => 2}, & &1)
[{1, 2}, {"a", "b"}]