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

时间:2012-10-04 09:41:23

标签: progress-4gl openedge

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

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

但是当我在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语句会改变变量的显示方式?

祝你好运 // MrBucket

1 个答案:

答案 0 :(得分:3)

你的第二个例子类似于:

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短语之类的内容。