switch式のサポート
投稿日: Mar 19, 2009 2:35:47 PM
R4.1ではレガシー言語にあわせて、switch caseの表現をサポートしています。
1 switch
when: 1 do: [10];
when: 2 do: [20];
when: 3 do: [30];
default: [#hello].
式なので、値を受け取り可能です。
ret := 123 switch
when: [:s | s < 0] do: [:v | v*1];
when: [:s | s > 1000] do: [:v | v*2];
when: [:s | s = 123] do: [:v | v*3];
default: [:v | v*4].
この場合はretの値は369となります。
クラスでマッチさせることもできます。
ret := #auau switch
class: Object do: [10];
kind: String do: [20];
class: Number do: [30].
retは20となります。
do:の後はセレクタとなるシンボルを使うこともできます。targetでメッセージの送り先を指定できます。指定のない場合はオリジナルのレシーバが送り先となります。
ret := 1 switch
when: 1 do: #printString;
when: 2 do: #class;
when: 3 do: #negated;
default: #abs.
retは'1'です。
ret := 1 switch target: 3;
when: 1 do: #printString;
when: 2 do: #class;
when: 3 do: #negated;
default: #abs.
retは'3'です。
なかなか便利でしょう!?