Elixir错误“erlang error :: guard_expr”

时间:2014-12-15 20:59:38

标签: elixir

iex控制台上,我发现以下错误,我不确定自己做错了什么......

case %{} do
  x when x == %{} -> true
  _x -> false
end

导致以下错误:

** (ErlangError) erlang error: :guard_expr

另外,我想解释一下我是如何找到这个的。我尝试通过查看elixir的实现并将其更改为将||[]{}视为与{{1}相同来创建自己的%{}宏}和falsehttps://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/kernel.ex#L2313

这是实施(它有同样的问题):

nil

带走defmodule Or do defmacro left || right do quote do case unquote(left) do x when x in [false, nil] or x == [] or x == {} or x == %{} -> unquote(right) x -> x end end end end 使事情有效。

1 个答案:

答案 0 :(得分:1)

这似乎是一个Erlang错误。以下是重现该问题的erlang代码:

case #{} of X when X == #{} -> X end.

感谢大家的确认!有关更多详细信息,请参阅注释。