defmodule CompareMaps do
def match do
map = %{a: 2, b: 3, c: 4}
test = %{a: 3}
match? test, map
end
end
CompareMaps.match
true
Run Code Online (Sandbox Code Playgroud)
然而,iex中的相同比较产生相反的结果.
match? %{a: 4}, %{a: 3, b: 3}
false
Run Code Online (Sandbox Code Playgroud)
match?/2是一个宏,它的第一个参数是一个模式,而不是一个值.在第一个代码片段中,您正在测试模式是否test与它的值匹配map,因为它test是一个标识符并且将匹配任何值.如果在模块/ iex中使用相同的代码,它们将给出相同的结果:
defmodule CompareMaps do
def match do
match? %{a: 3}, %{a: 2, b: 3, c: 4}
end
end
Run Code Online (Sandbox Code Playgroud)
iex(1)> CompareMaps.match
=> true
Run Code Online (Sandbox Code Playgroud)
和
iex(1)> map = %{a: 2, b: 3, c: 4}
%{a: 2, b: 3, c: 4}
iex(2)> test = %{a: 3}
%{a: 3}
iex(3)> match? test, map
true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |