type-switch
実行時の値のデータ型によって処理を分岐する場合にはisaプリミティブが使用できます。
{if x isa Foo then ||xがFoo型だった場合の処理 elseif x isa Bar then ||xがBar型だった場合の処理 }
データ型によって分岐した後の処理はキャストを伴うことが多いでしょう。
キャストにはasaプリミティブを使います。
{if x isa Foo then {use-foo x asa Foo} elseif x isa Bar then {use-bar x asa Bar} }
上記のような処理(isaによる実行時型チェックとasaによるキャストの組合せ)はtype-switchマクロを使って以下のように記述することが可能です。
{type-switch x case foo:Foo do {use-foo foo} case bar:Bar do {use-bar bar} }
type-switchを用いることによって処理の意図(型による条件分岐)が明確になるというメリットがあります。