Elixir Map.fetch(key,value)和Map.fetch有什么区别!(关键、价值)
两者略有不同,但没有讨论什么不同 文档中确实提到了第一个是“由编译器内联的”,后面一个是引发的异常 是否有一个经验法则,我应该在什么时候使用一个而不是另一个,反之亦然Elixir Map.fetch(key,value)和Map.fetch有什么区别!(关键、价值),elixir,Elixir,两者略有不同,但没有讨论什么不同 文档中确实提到了第一个是“由编译器内联的”,后面一个是引发的异常 是否有一个经验法则,我应该在什么时候使用一个而不是另一个,反之亦然 关于差异是返回值: iex(1)> map = %{foo: 42} %{foo: 42} iex(2)> Map.fetch(map, :foo) {:ok, 42} iex(3)> Map.fetch(map, :bar) :error iex(4)> Map.fetch!(map, :foo) 42
关于差异是返回值:
iex(1)> map = %{foo: 42}
%{foo: 42}
iex(2)> Map.fetch(map, :foo)
{:ok, 42}
iex(3)> Map.fetch(map, :bar)
:error
iex(4)> Map.fetch!(map, :foo)
42
iex(5)> Map.fetch!(map, :bar)
** (KeyError) key :bar not found in: %{foo: 42}
(stdlib) :maps.get(:bar, %{foo: 42})
fetch
如果键存在,则返回{:ok,value}
,否则返回:error
<代码>获取代码>仅返回值,如果该值不存在,则会引发错误
fetch
可以轻松处理模式匹配时密钥不存在的情况,而您通常需要使用fetch代码>当您希望密钥存在于映射中且缺少它时,代码中可能存在错误。不同之处在于返回值:
iex(1)> map = %{foo: 42}
%{foo: 42}
iex(2)> Map.fetch(map, :foo)
{:ok, 42}
iex(3)> Map.fetch(map, :bar)
:error
iex(4)> Map.fetch!(map, :foo)
42
iex(5)> Map.fetch!(map, :bar)
** (KeyError) key :bar not found in: %{foo: 42}
(stdlib) :maps.get(:bar, %{foo: 42})
fetch
如果键存在,则返回{:ok,value}
,否则返回:error
<代码>获取代码>仅返回值,如果该值不存在,则会引发错误
fetch
可以轻松处理模式匹配时密钥不存在的情况,而您通常需要使用fetch代码>当您希望密钥存在于映射中而缺少它时,很可能是代码中的错误。谢谢Dogbert-非常感谢。谢谢Dogbert-非常感谢。通常,任何函数的bang版本(!)都意味着它可能引发异常。因此,File.open
——没有潜在的异常<代码>文件。打开代码>--潜在异常。通常,任何函数的bang版本(!)都意味着它可能引发异常。因此,File.open
——没有潜在的异常<代码>文件。打开代码>--潜在异常。