在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)
另外,我想解释一下我是如何找到这个的.我试图让我自己||看的灵药的实现,改变它来治疗宏[],{}和%{}同false和nil.
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 == %{}让事情发挥作用.
这似乎是 Erlang 的一个错误。这是重现该问题的 erlang 代码:
case #{} of X when X == #{} -> X end.
Run Code Online (Sandbox Code Playgroud)
谢谢大家的确认!请参阅评论了解更多详情。
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |