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'です。 なかなか便利でしょう!? |
お知らせ >