【问题标题】:What's the meaning of "WHEN ? THEN"?“WHEN ? THEN”是什么意思?
【发布时间】:2021-02-22 12:58:40
【问题描述】:

在阅读一些源代码时,我偶然发现了以下正在进行的代码:

WHEN ? THEN
...

在其他语言中,我见过类似IF TRUE THEN ...(此代码始终运行)或IF FALSE THEN ...(此代码永远不会运行)之类的代码。

由于? 表示“无”正在进行中,这段代码是否与IF FALSE THEN ... 含义相同?

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    如果在 CASE 语句中使用它,它会将 CASE 块中使用的值与未知值进行比较。这类似于 C 语言中的 switch 语句。

    CASE lOk:
        WHEN TRUE THEN ...
        WHEN FALSE THEN ...
        WHEN ? THEN ...
    END CASE . 
    

    【讨论】:

    • 我刚刚进一步验证了:它在 CASE 语句中,写着 WHEN 0 THEN ... WHEN ? THEN ... OTHERWISE ...。根据您的回答,OTHERWISE 案子永远不会被触发。这是正确的吗?
    • 在这种情况下,否,因为逻辑/布尔数据类型只有 3 个有效值。但是,如果您使用字符或数值作为表达式,那么您更有可能拥有 OTHERWISE
    • ?是未知值 - 不是 /any/ 值 - 请参阅 docs.progress.com/bundle/openedge-abl-reference-117/page/…
    【解决方案2】:

    在表达式中

    WHEN value[ OR WHEN value] . . . THEN
    

    每个值都是一个表达式,计算结果为表达式的可能值。如果 value 与 expression 的当前值匹配,则执行关联的块或语句。现在的问题是,如何评估未知或空值。这是用“?”完成的。特点。例如:

    IF myVariable = ? THEN DISPLAY "This value is unknown".
    

    如果您需要评估与实际问号字符的比较,您只需将问号括在单引号或双引号中。

    IF myVariable = '?' THEN DISPLAY "This is a question mark".
    IF myVariable = "?" THEN DISPLAY "This is a question mark".
    

    为了将来参考,Progress Knowledgebase 是获取信息的好地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多