为什么我的变量在erlang中不安全?

时间:2017-01-13 17:19:55

标签: exception erlang

我是Erlang的新手。我对以下代码有疑问:

try
    {ok, [Card]} = io:fread("Input card number: ","~d")
    catch
      error:K -> (Card=0);
      exit:K -> (Card=0);
      throw:K -> (Card=0)
    end,

我不知道为什么'变量'卡'在'尝试'中不安全。我该怎么办?

1 个答案:

答案 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,