CASE语句的WHEN子句中是否可以使用OR逻辑运算符?
CASE语句多值匹配问题解答
- 绝大多数编程语言的标准
CASE/SWITCH语句,不支持你示例里在WHEN子句后直接用OR连接多个匹配值的写法。你写的WHEN "Cell" OR "PASTORS PHONE" OR "Alternative"不会按预期执行:OR是布尔运算符,会把两侧的字符串值转为布尔类型做运算,完全达不到“匹配多个值之一”的效果。 - 你不需要为每个取值单独写一整组WHEN加执行逻辑,对应你写的OpenEdge ABL语法,单个WHEN分支本身支持直接列出多个匹配值,用逗号分隔即可,不需要加OR。
修正后的可正常运行的代码如下:
CASE ttPhoneData.phoneDescription: WHEN "Cell", "PASTORS PHONE", "Alternative" THEN RUN CreatePhone("Mobile", TRUE, ttPhoneData.phone). WHEN "Business", "ChurchPhone", "ChurchPhone2" THEN RUN CreatePhone("Work", TRUE, ttPhoneData.phone). WHEN "Home" THEN RUN CreatePhone("Home", TRUE, ttPhoneData.phone). END CASE.
额外提醒:你原代码最后一个WHEN分支里的参数存在笔误,把
ttPhoneData.phone错写为ttPhoneData,phome,运行时会触发参数不匹配错误,上面的修正版已经修复了这个问题。
如果是使用不支持单分支多值匹配的老旧编程语言,也有两种无需重复写执行逻辑的方案:
- 利用CASE语句的穿透特性,把多个匹配值对应的WHEN分支连续排列,只在最后一个匹配值的分支下写要执行的逻辑
- 如果匹配规则较复杂,直接换成
IF-ELSE IF结构做判断,就可以正常用OR连接多个等值判断条件
内容的提问来源于stack exchange,提问作者Felice
相关产品推荐
相关产品推荐

