If…else if…else in REBOL

我的未来我决定 提交于 2019-12-08 17:43:29

问题


I've noticed that REBOL doesn't have a built in if...elsif...else syntax, like this one:

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!"
]

I have found a workaround, but it's extremely verbose:

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!"
            ]
        ]
 ]

Is there a more concise way to implement an if...else if...else chain in REBOL?


回答1:


The construct you would be looking for would be CASE. It takes a series of conditions and code blocks to evaluate, evaluating the blocks only if the condition is true and stopping after the first true condition is met.

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!"
    ]
]

As you see, getting a default is as simple as tacking on a TRUE condition.

Also: if you wish, you can have all of the cases run and not short circuit with CASE/ALL. That prevents case from stopping at the first true condition; it will run them all in sequence, evaluating any blocks for any true conditions.




回答2:


And a further option is to use all

all [
   expression1
   expression2
   expression3
]

and as long as each expression returns a true value, they will continue to be evaluated.

so,

if all [ .. ][
 ... do this if all of the above evaluate to true.
 ... even if not all true, we got some work done :)
]

and we also have any

if any [
       expression1
       expression2
       expression3
][  this evaluates if any of the expressions is true ]



回答3:


You can use the case construct for this, or the switch construct.

case [
   condition1 [ .. ]
   condition2 [ ... ]
   true [ catches everything , and is optional ]
]

The case construct is used if you're testing for different conditions. If you're looking at a particular value, you can use switch

switch val [
   va1 [ .. ]
   val2 [ .. ]
   val3 val4 [ either or matching ]
]


来源:https://stackoverflow.com/questions/23307263/if-else-if-else-in-rebol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!