progress-4gl - Progress 4gl 中 if 语句的奇怪行为

标签 progress-4gl openedge

我注意到 Progress 4gl 中的 IF 语句有一个非常奇怪的行为。

我定义了一个格式为“999”的整数,它告诉它有3位数字,然后我分配一个低于100的值(例如12),然后当我显示它时,它应该显示为“012”。

但是当我在 DISPLAY 语句中添加一条实际上不应该执行任何操作的 IF 语句时,该变量将显示为“12”。

这是一个测试代码,用于澄清差异。 LABEL 不影响变量的输出。

DEF VAR tmp AS INTEGER FORMAT "999".
ASSIGN tmp = 12.

DISPLAY 
    tmp LABEL "disp1".

DISPLAY
    IF TRUE THEN tmp ELSE tmp LABEL "disp2".

通过将格式更改为“">99”也可以实现相同的行为。

我的问题是:为什么 IF 语句会改变变量的显示方式?

最诚挚的问候 //桶先生

最佳答案

您的第二个示例类似于:

define variable tmp1 as integer no-undo format "999".
define variable tmp2 as integer no-undo format "99999".

display
  if true then tmp1 else tmp2
.

编译器看到 IF 函数返回一个整数并应用整数的默认格式。编译器不会尝试再次猜测您并注意到(在您的示例中)两个结果是相同的变量。

(在本例中,IF 是嵌入在 DISPLAY 中的函数——而不是它自己的独立语句。)

要获得您正在寻找的结果:

display
  ( if true then tmp1 else tmp2 ) format "999"
.

每当我嵌入 IF 函数时,我都会特意将其括在括号中 - 这有助于清楚地表明它是嵌入的,并清楚地显示诸如 FORMAT 短语之类的内容适用的位置。

关于progress-4gl - Progress 4gl 中 if 语句的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724464/

相关文章:

c - 4gl 和 C 结构的进展

SQL 列出具有实际所有者的所有公寓

mysql - 进展 OpenEdge、ODBC、记录集、加入,天哪

openedge - 如何重新抛出进行中的捕获异常 4gl?

sql - 进度数据库 4GL - 导出文件的数学计算

syntax - TIME 减 4 小时的 Openedge 语法

progress-4gl - 在逗号分隔的项目进度列表上运行循环 4GL

sql - Sql 宽度的进度 ODBC 问题(DBTool?)

openedge - 使用带有多个可能分隔符的 num-entries()