case
式は、ラベル付き式の集合から評価する式を選択するときに使用します。この評価は、ラベルと比較されるテスト値に基づいて行われます。
テスト式とラベルがマッチする最初の式だけが評価されます。
すべてのラベルは、テスト式と比較できなければなりません。
ラベル付き式がブロック式である可能性もあるので、実行するコード ブロックから選んだ case
式をケース ステートメントとして使用できます。
<case_expr>
の構文は以下のとおりです。
case [ <expr> ] of ( <cases> )
ここで、<expr>
はテスト式、<cases>
は一連のラベル付き式です。
<factor>: <expr>
default: <expr>
例
b = Box()
copy_type = 2 --copy
new_obj = case copy_type of
(
2: copy b
3: instance b
default: reference b
)
特殊ラベル default
をオプションで使用することにより、他のラベルがテスト式にマッチしないときに評価される式にタグを指定できます。
default
ラベルが使用されない場合は、テスト式にマッチするラベルがないため、case
式は undefined
を返します。
ラベルとは、数リテラル、名前リテラル、文字列リテラル、変数、またはブロック式などの要素 <factors>
のことです。
case
式が評価されると、いったんテスト式が評価され、比較結果がテスト式の値に等しい式が見つかるまで各ラベル式が順に評価されていきます。
次にラベルが付く式が評価され、それが case
式全体の結果になります。
式が括弧で囲まれている場合、式には複数の行を含めることができます。
それ以降のラベルの評価またはテストは行われません。
テスト式はオプションです。
テスト式が提供されない場合、ラベルはすべてブール値か式であると予想され、true
に評価された最初のラベルが選択されます。
このバリアントではラベルを式として使用するのが一般的なので、次のように必ずラベルをカッコで囲んでください。
例:
a= random 1 20
b = random 1 20
c = random 1 20
d = random 1 20
case of
(
(a > b): print "a is big"
(b < c): print "b is little"
(c <= d*3): (
print "c is less than 3 times d"
print "also this code has 2 lines"
)
default: print "none of the above"
)