我是 Erlang 的新手。我对下面的代码有问题:
try
{ok, [Card]} = io:fread("Input card number: ","~d")
catch
error:K -> (Card=0);
exit:K -> (Card=0);
throw:K -> (Card=0)
end,
Run Code Online (Sandbox Code Playgroud)
我不知道为什么“尝试”中的“变量”卡不安全。我该怎么办?
像你这样的代码可以在case
表达式中工作,但对于 a try
,这是 Erlang 中变量绑定规则的一个例外。从参考手册:
对于 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,
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
640 次 |
最近记录: |