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
Run Code Online (Sandbox Code Playgroud)
如果仅对表示键和值的元组返回true,为什么它不会在前两个调用中引发错误?
如果你看一下in/2的文档,它说:
此运算符(它是一个宏)只是转换为对Enum.member?/ 2的调用.
Enum.member?/ 2适用于任何Enumberable.
member?/2地图的Enumerable协议所需的实现:
def member?(map, {key, value}) do
{:ok, match?({:ok, ^value}, :maps.find(key, map))}
end
def member?(_map, _other) do
{:ok, false}
end
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码查看其他地图实例转换为Enumerable协议的元组:
iex(4)> Enum.map(%{"a" => "b", 1 => 2}, & &1)
[{1, 2}, {"a", "b"}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |