Elixir错误"erlang error :: guard_expr"

mgw*_*ann 9 elixir

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

case %{} do
  x when x == %{} -> true
  _x -> false
end
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

** (ErlangError) erlang error: :guard_expr
Run Code Online (Sandbox Code Playgroud)

另外,我想解释一下我是如何找到这个的.我试图让我自己||看的灵药的实现,改变它来治疗宏[],{}%{}falsenil. https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/kernel.ex#L2313

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

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
Run Code Online (Sandbox Code Playgroud)

带走or x == %{}让事情发挥作用.

mgw*_*ann 1

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

case #{} of X when X == #{} -> X end.
Run Code Online (Sandbox Code Playgroud)

谢谢大家的确认!请参阅评论了解更多详情。