我注意到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
答案 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短语之类的内容。