お知らせ‎ > ‎

switch式のサポート

2009/03/19 7:35 に SmalltalkUsers Admin が投稿   [ 2009/03/21 6:14 に更新しました ]
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'です。

なかなか便利でしょう!?

Comments