Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir Map.fetch(key,value)和Map.fetch有什么区别!(关键、价值)_Elixir - Fatal编程技术网

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
——没有潜在的异常<代码>文件。打开--潜在异常。