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
相关产品推荐
相关产品推荐

