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

