Dyalog APL:如何让函数遇错后持续执行直至成功?
重写APL代码实现出错自动重试直到成功
你现有一段APL代码:
assert 0=⊃res←iConga.Clt''WSHOST WSPORT'http' 100000('X509'(⎕NEW iConga.X509Cert))('Options'iConga.Options.WSAutoUpgrade) wsclt←2⊃res ws_state.cid←wsclt assert 0=⊃res←iConga.SetProp wsclt'WSUpgrade'('/ws'WSHOST'') ⍝ user should be token assert 0 wsclt'WSUpgrade'≡3↑res←iConga.Wait wsclt 1000
其中assert的定义为:
assert←{'assertion failed'⎕SIGNAL(⊃⍵)↓11}
要实现出错时持续执行直至成功,可将原代码的断言逻辑替换为循环重试结构,每次执行后检查结果,失败则继续重试。以下是重写后的代码:
:Repeat res←iConga.Clt''WSHOST WSPORT'http' 100000('X509'(⎕NEW iConga.X509Cert))('Options'iConga.Options.WSAutoUpgrade) :Until 0=⊃res wsclt←2⊃res ws_state.cid←wsclt :Repeat res←iConga.SetProp wsclt'WSUpgrade'('/ws'WSHOST'') ⍝ user should be token :Until 0=⊃res :Repeat res←iConga.Wait wsclt 1000 :Until 0 wsclt'WSUpgrade'≡3↑res
说明
- 用
:Repeat/:Until循环替代原assert的错误抛出逻辑,每次执行目标操作后,判断是否符合成功条件,不符合则重复执行。 - 每个关键操作步骤(客户端创建、设置属性、等待响应)都独立包裹在循环中,确保某一步失败时仅重试该步骤,无需从头开始(若希望从头重试,可将所有步骤放入同一个大循环内)。
内容的提问来源于stack exchange,提问作者конструктор
相关产品推荐
相关产品推荐

