评估 "andalso" 个参数
Evaluation of "andalso" arguments
我是 erlang 的新手,我在 erlang shell 中尝试了以下内容:
1> ((Var1 = 13) == 13) andalso ((Var2 = 12) == 13).
false
2> Var1.
13
3> Var2.
* 1: variable 'Var2' is unbound
4>
为什么 Var2 变量未绑定到值 12?
这听起来像是 Erlang 求值器中的错误。编译器实际上拒绝让它通过。编译:
-module(t).
-compile(export_all).
main() ->
((Var1 = 13) == 13) andalso ((Var2 = 12) == 13),
{Var1,
Var2}.
产量:
t.erl:7: variable 'Var2' unsafe in 'andalso' (line 5)
这告诉您,如果左侧表达式失败,代码将无法按预期执行。
shell 让它通过意味着那里的求值器 运行 没有正确匹配编译器。可能值得在 erlang-bugs.
向 OTP 团队报告
E1 andalso E2
(我认为是因为 R13)等同于
case E1 of
false -> false;
_ -> E2
end;
与这个定义相比,我同意 Var2 在你的情况下应该是有界的。
但一般来说,您无法保证 E2 会被求值,因此给 E2 中的任何变量赋值确实是不安全的。
我试图按照 erl_parse 中的表达式进行解析,但我不能说这种行为是否是故意的。
我是 erlang 的新手,我在 erlang shell 中尝试了以下内容:
1> ((Var1 = 13) == 13) andalso ((Var2 = 12) == 13).
false
2> Var1.
13
3> Var2.
* 1: variable 'Var2' is unbound
4>
为什么 Var2 变量未绑定到值 12?
这听起来像是 Erlang 求值器中的错误。编译器实际上拒绝让它通过。编译:
-module(t).
-compile(export_all).
main() ->
((Var1 = 13) == 13) andalso ((Var2 = 12) == 13),
{Var1,
Var2}.
产量:
t.erl:7: variable 'Var2' unsafe in 'andalso' (line 5)
这告诉您,如果左侧表达式失败,代码将无法按预期执行。
shell 让它通过意味着那里的求值器 运行 没有正确匹配编译器。可能值得在 erlang-bugs.
向 OTP 团队报告E1 andalso E2
(我认为是因为 R13)等同于
case E1 of
false -> false;
_ -> E2
end;
与这个定义相比,我同意 Var2 在你的情况下应该是有界的。
但一般来说,您无法保证 E2 会被求值,因此给 E2 中的任何变量赋值确实是不安全的。
我试图按照 erl_parse 中的表达式进行解析,但我不能说这种行为是否是故意的。