defmodule CompareMaps do
def match do
map = %{a: 2, b: 3, c: 4}
test = %{a: 3}
match? test, map
end
end
CompareMaps.match
true
然而,iex中的相同比较会产生相反的结果。
match? %{a: 4}, %{a: 3, b: 3}
false
答案 0 :(得分:5)
match?/2
是一个宏,它的第一个参数是模式,而不是值。在第一个代码段中,您正在测试模式test
是否与map
的值匹配,因为test
是一个标识符并且将匹配任何值。如果在模块/ iex中使用相同的代码,它们将给出相同的结果:
defmodule CompareMaps do
def match do
match? %{a: 3}, %{a: 2, b: 3, c: 4}
end
end
iex(1)> CompareMaps.match
=> true
和
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