我是Erlang的新手。我对以下代码有疑问:
try
{ok, [Card]} = io:fread("Input card number: ","~d")
catch
error:K -> (Card=0);
exit:K -> (Card=0);
throw:K -> (Card=0)
end,
我不知道为什么'变量'卡'在'尝试'中不安全。我该怎么办?
答案 0 :(得分:2)
像你这样的代码可以在case
表达式中工作,但对于try
,这是Erlang中变量绑定规则的一个例外。来自renameFile
:
对于Erlang 5.4 / OTP R10B中引入的try表达式,变量作用域受到限制,因此表达式中绑定的变量始终是“不安全的”。在表达之外。这有待改进。
您可以像这样编写代码:
Card =
try
{ok, [C]} = io:fread("Input card number: ","~d"),
C
catch
error:K -> 0;
exit:K -> 0;
throw:K -> 0
end,