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

Progress中处理include文件可选未命名参数的问题

解决Progress ABL Include文件可选无名参数问题

要处理可选的无名参数,不能直接用DEFINED({2})——当未传递第二个参数时,{2}本身在预处理器阶段就是未定义的符号,会直接触发编译错误。正确的做法是利用预处理器内置变量&NUMBER-OF-PARAMETERS来判断传递的参数数量,再分支处理默认值。

修改后的message.i

/*
    - {1}: Message.
    - {2}: OPTIONAL Sender name
*/
MESSAGE 
    &IF &NUMBER-OF-PARAMETERS = 1 &THEN
        "Unknown sender"
    &ELSE
        {2}
    &ENDIF
    + ": " + {1} 
VIEW-AS ALERT-BOX.

如果需要复用sender变量,也可以用变量存储的方式:

/*
    - {1}: Message.
    - {2}: OPTIONAL Sender name
*/
DEFINE VARIABLE cSender AS CHARACTER NO-UNDO.

&IF &NUMBER-OF-PARAMETERS = 1 &THEN
    cSender = "Unknown sender".
&ELSE
    cSender = {2}.
&ENDIF

MESSAGE cSender + ": " + {1} VIEW-AS ALERT-BOX.

测试效果

你的test.p无需修改,两种调用方式都能正常编译并输出预期结果:

{message.i "hello world" }
// 输出"Unknown sender: hello world"

{message.i "hello world" "Michael" }
// 输出"Michael: hello world"

原理说明

&NUMBER-OF-PARAMETERS是Progress预处理器的内置变量,会返回当前传递给include文件的参数总数。通过判断这个数值,就能安全地处理参数缺失的场景,避免未定义符号的编译错误。

内容的提问来源于stack exchange,提问作者W0lfw00ds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:30:00