【问题标题】:How does `in` operator work with maps?`in` 运算符如何处理地图?
【发布时间】:2016-08-04 10:14:51
【问题描述】:

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,为什么前两次调用不报错?

【问题讨论】:

    标签: elixir


    【解决方案1】:

    如果您查看in/2 的文档,它会指出:

    这个操作符(它是一个宏)简单地转换为对 Enum.member?/2 的调用。

    Enum.member?/2 适用于任何 Enumberable。

    地图的 Enumerable 协议需要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"}]
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2015-06-10
    • 2017-08-27
    相关资源
    最近更新 更多