You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者конструктор

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:35:03