true _x -> false end 导致以下错误: ** (-6ren">
gpt4 book ai didi

药剂错误 "erlang error: :guard_expr"

转载 作者:行者123 更新时间:2023-12-04 04:38:14 24 4
gpt4 key购买 nike

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

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

导致以下错误:
** (ErlangError) erlang error: :guard_expr

另外,我想解释一下我是怎么发现的。我尝试通过查看elixir的实现并将其更改为将 ||[]{}%{}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

删除 or x == %{}可使一切正常。

最佳答案

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

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

感谢大家的确认!请参阅评论以获取更多详细信息。

关于药剂错误 "erlang error: :guard_expr",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27493029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com