Elixir比赛?在模块中不起作用

时间:2017-07-19 15:26:48

标签: elixir

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

1 个答案:

答案 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