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.这个异常根本不可捕获吗?