Если... еще, если... еще в REBOL
Я заметил, что 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!"
]
]
]
Есть ли более краткий способ реализации if...else if...else
цепь в REBOL?
3 ответа
Конструкция, которую вы будете искать, будет 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!"
]
]
Как видите, получить значение по умолчанию так же просто, как выполнить условие ИСТИНА.
Кроме того: если вы хотите, вы можете запустить все случаи, а не короткое замыкание с помощью CASE/ALL. Это предотвращает остановку дела при первом истинном условии; он будет запускать их все последовательно, оценивая любые блоки для любых истинных условий.
И еще один вариант - использовать все
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 ]
Для этого вы можете использовать конструкцию case или конструкцию switch.
case [
condition1 [ .. ]
condition2 [ ... ]
true [ catches everything , and is optional ]
]
Конструкция case используется, если вы тестируете различные условия. Если вы смотрите на конкретное значение, вы можете использовать переключатель
switch val [
va1 [ .. ]
val2 [ .. ]
val3 val4 [ either or matching ]
]