Если... еще, если... еще в 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 ]
]
Другие вопросы по тегам