我注意到REBOL没有内置if...elsif...else
语法,就像这样:
theVar: 60
{This won't work}
if theVar > 60 [
print "Greater than 60!"
]
elsif theVar == 3 [
print "It's 3!"
]
elsif theVar < 3 [
print "It's less than 3!"
]
else [
print "It's something else!"
]
我找到了一种解决方法,但它非常冗长:
theVar: 60
either theVar > 60 [
print "Greater than 60!"
][
either theVar == 3 [
print "It's 3!"
][
either theVar < 3 [
print "It's less than 3!"
][
print "It's something else!"
]
]
]
在REBOL中实现if...else if...else
链是否有更简洁的方法?
答案 0 :(得分:8)
您要寻找的构造将是CASE。它需要一系列条件和代码块来评估,仅在条件为真时评估块并在满足第一个真条件后停止。
theVar: 60
case [
theVar > 60 [
print "Greater than 60!"
]
theVar == 3 [
print "It's 3!"
]
theVar < 3 [
print "It's less than 3!"
]
true [
print "It's something else!"
]
]
如您所见,获取默认值就像处理TRUE条件一样简单。
另外:如果您愿意,您可以使用CASE / ALL运行所有情况而不是短路。这可以防止案件在第一个真实条件下停止;它将按顺序运行它们,为任何真实条件评估任何块。
答案 1 :(得分:7)
另一个选择是使用所有
all [
expression1
expression2
expression3
]
只要每个表达式返回一个真值,它们就会继续被评估。
所以,
if all [ .. ][
... do this if all of the above evaluate to true.
... even if not all true, we got some work done :)
]
我们也有
if any [
expression1
expression2
expression3
][ this evaluates if any of the expressions is true ]
答案 2 :(得分:2)
您可以使用case构造或switch构造。
case [
condition1 [ .. ]
condition2 [ ... ]
true [ catches everything , and is optional ]
]
如果您正在测试不同的条件,则使用案例构造。如果您正在查看特定值,则可以使用开关
switch val [
va1 [ .. ]
val2 [ .. ]
val3 val4 [ either or matching ]
]