有没有人能告诉我为什么这段代码会说X在“尝试”中是不安全的,我知道为什么,但更重要的是如何修复它。
try X = lists:append(lists:zipwith3(fun(X, Y, Z) -> [X, Y, Z] end, Data1, Data2, Data3)) of
MP -> X
catch K -> (X = 0)
end.
%MP = [lists:zipwith3(X, Y, Z) || X, Y, Z <- [Data1, Data2, Data3]],
P = X
字符串
2条答案
按热度按时间f45qwnt81#
最简单的解决方法是将赋值放在try-catch之外:
字符串
至于为什么会发生这种情况,Erlang参考手册中关于表达式的章节说:
对于
try
表达式,变量作用域是有限的,因此表达式中绑定的变量在表达式外部总是“不安全”的。它曾经说“这是有待改进的”,但在this commit中被删除了。
xxe27gdn2#
这是不安全的,我相信,由于事实上,你没有涵盖所有的例外。当你有
字符串
我相信它只会捕获抛出的异常,仍然有错误和退出。IIRC所以你可能需要
型
或明确地将它们捕获为
型
(我不是100%正确的原子名称,但想法仍然是一样的)