gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:30:11 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com