我注意到 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/