任何人都可以告诉我为什么这些代码会在“尝试”中吐出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
答案 0 :(得分:10)
解决它的最简单方法是将赋值放在try-catch之外:
X =
try lists:append(lists:zipwith3(fun(X, Y, Z) -> [X, Y, Z] end, Data1, Data2, Data3)) of
MP -> MP
catch K -> 0
end.
答案 1 :(得分:0)
我认为这是不安全的,因为你没有涵盖所有例外情况。 当你有
catch K -> (X = 0)
我相信它只能捕获抛出异常,仍有错误,并退出。 IIRC 所以你可能需要
catch _:K -> (X=0)
或明确地将它们视为
catch
error:K -> (X=0);
exit:K -> (X=0);
throw:K -> (X=0)
(我不是100%,我的原子名称是正确的,但这个想法仍然是一样的)