【问题标题】:Wierd behaviour of an if statement in Progress 4glProgress 4gl 中 if 语句的奇怪行为
【发布时间】:2012-10-06 04:26:23
【问题描述】:

我注意到 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 语句会改变变量的显示方式?

最好的问候 //MrBucket

【问题讨论】:

    标签: progress-4gl openedge


    【解决方案1】:

    您的第二个示例类似于:

    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 短语之类的东西适用的地方。

    【讨论】:

    • 感谢汤姆的回答。我对这门语言有点陌生,对我来说似乎有点奇怪。我会记得重新格式化变量,以防我再次遇到这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多