Variables Erlang-检查未绑定变量

Variables Erlang-检查未绑定变量,variables,testing,binding,erlang,Variables,Testing,Binding,Erlang,有没有办法知道在表达式求值后某个变量是否已绑定 我的代码: {ok, After} = ts_dynvars:lookup(last, DynVars), 我需要知道的是,是否有任何“后”的工作与否。也许“ok”可以用于我的目的 谢谢 如果(尝试)引用表达式中的未绑定变量,则是编译错误。特别是在 {ok, After} = ts_dynvars:lookup(last, DynVars), 只有两种可能性:如果模式匹配,之后的被绑定,并且可以使用;否则,将抛出异常,并且在之后尝试使用的代码将

有没有办法知道在表达式求值后某个变量是否已绑定

我的代码:

{ok, After} = ts_dynvars:lookup(last, DynVars),
我需要知道的是,是否有任何“后”的工作与否。也许“ok”可以用于我的目的

谢谢

如果(尝试)引用表达式中的未绑定变量,则是编译错误。特别是在

{ok, After} = ts_dynvars:lookup(last, DynVars),
只有两种可能性:如果模式匹配,之后的
被绑定,并且可以使用;否则,将抛出异常,并且在
之后尝试使用
的代码将永远不会执行

更新:


你是说在模式不匹配的情况下,没有办法分支代码执行吗

当然有:

case ts_dynvars:lookup(last, DynVars) of
  {ok, After} -> ...;
  _ -> ... %% or other patterns
end
但是编译器不允许您在其他分支中或在
case
之后使用
之后(除非所有分支在
之后绑定

这个异常根本不可捕获吗

它是:

try
  {ok, After} = ts_dynvars:lookup(last, DynVars),
  ...
catch
  _:_ -> ...
end
但同样,您将无法在
catch
部分中或在
try
结束后使用
After
(当然,您可以在
之后绑定名为
的新变量)。

3种可能性:

  • After
    尚未绑定,
    ts_dynvars:lookup/2
    返回 表单
    {ok,Value}
    之后的
    被绑定到
    Value
    (复制) 然后程序转到下一行
  • After
    已绑定且
    ts_dynvars:lookup/2
    准确返回
    {ok,After}
    :模式匹配;
    之后
    保持其值;然后程序转到下一行
  • ts_dynvars:lookup/2
    返回与
    {ok,After}
    不匹配的
    Ret
    如前两行所述。然后执行停止,然后 VM抛出异常
    {badmatch,Ret}
    。如果该行处于
    捕捉中
    或 在
    try
    部分,进程将继续,否则将崩溃。下一个 永远不会执行代码行(如果有)

在这种情况下,
之后的
在什么情况下不会被绑定?您是在告诉我在模式不匹配的情况下无法分支代码执行吗?i、 e.这个异常根本不可捕获吗?