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

Progress编译选项requireReturnValues遇错误抛出时编译失败咨询

关于OpenEdge requireReturnValues="Error"编译选项的替代解决方法

当你设置编译选项requireReturnValues="Error"后,以下代码无法通过校验:

METHOD PUBLIC LOGICAL checkValue(i_cValue AS CHAR):
    IF i_cValue <> ? THEN DO:
        RETURN TRUE.
    END.
    
    UNDO, THROW NEW Progress.Lang.AppError("Invalid value!").
END METHOD.

编译器会误判存在未返回值的代码路径(尽管THROW已经终止方法执行)。除了将RETURN TRUE.移至末尾,还有两种可行的解决方法:

  • 添加冗余RETURN语句适配编译器校验
    由于编译器可能无法识别THROW的终止特性,可在THROW后添加一条永远不会执行的RETURN语句,让编译器认为所有路径都有返回值:

    METHOD PUBLIC LOGICAL checkValue(i_cValue AS CHAR):
        IF i_cValue <> ? THEN DO:
            RETURN TRUE.
        END.
        
        UNDO, THROW NEW Progress.Lang.AppError("Invalid value!").
        RETURN FALSE. // 仅用于满足编译校验,实际不会执行
    END METHOD.
    
  • 用ELSE明确分支结构
    通过重构代码,用ELSE将抛出异常的分支与返回分支明确区分,让编译器清晰识别所有分支的终止行为:

    METHOD PUBLIC LOGICAL checkValue(i_cValue AS CHAR):
        IF i_cValue <> ? THEN DO:
            RETURN TRUE.
        END. ELSE DO:
            UNDO, THROW NEW Progress.Lang.AppError("Invalid value!").
        END.
    END METHOD.
    

    这种方式无需冗余代码,通过明确的分支逻辑让编译器认可所有路径都已正确终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:17:36