Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir “长生不老药错误”;erlang错误::guard_expr";_Elixir - Fatal编程技术网

Elixir “长生不老药错误”;erlang错误::guard_expr";

Elixir “长生不老药错误”;erlang错误::guard_expr";,elixir,Elixir,在iex控制台上,我发现以下错误,我不确定我做错了什么 case %{} do x when x == %{} -> true _x -> false end 导致以下错误: ** (ErlangError) erlang error: :guard_expr 另外,我想解释一下我是如何发现这个的。我试图通过查看elixir的实现并将其更改为处理[],{}和%{}与false和nil相同,来创建自己的|宏。 下面是该实现(它有相同的问题): 去掉或x==%{}可以让事情

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

case %{} do
  x when x == %{} -> true
  _x -> false
end
导致以下错误:

** (ErlangError) erlang error: :guard_expr
另外,我想解释一下我是如何发现这个的。我试图通过查看elixir的实现并将其更改为处理
[]
{}
%{}
false
nil
相同,来创建自己的
|
宏。

下面是该实现(它有相同的问题):


去掉
或x==%{}
可以让事情顺利进行。

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

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

谢谢大家的确认!有关详细信息,请参阅评论。

Strange。使用变量代替文本编译,即:
y=%{};案例y,do:(x当x==y->true;_x->false)
Yes,并且它唯一导致问题的映射,[]或其他东西不会使它崩溃。奇怪的是,当在函数定义中使用相同的保护时,它不会崩溃……这似乎是一个Erlang错误。我可以在纯Erlang壳中复制这个。我找不到关于这种行为的任何参考资料。在任何情况下,直到解决这个问题,你应该考虑一些解决办法,比如由@基督教提出的一个。也许在Erlang Bug邮件列表()上。这是复制它的Erlang代码:
X的case{}当X==={{}->X结束时。
我应该提到我尝试过使用Erlang 17.0。也许它是固定在17.4,但我没有安装它来验证。
case #{} of X when X == #{} -> X end.