#caseOf:otherwise:

http://ja.doukaku.org/comment/5174/
Smalltalk版switch。直感的で解りやすい。

!Object methodsFor: 'switching'!
caseOf: cases
  cases do: [:a| self = a key value and: [ ^a value value ] ].
  ^nil!
caseOf: cases otherwise: owBlock
  ^(self caseOf: cases) ifNil: owBlock!

実装も簡単。ただ遅そうではある*1
百害あって一利なしなんて話も聞くけど,elif連打よりは随分いい。

*1:Squeakコンパイル時にほげほげするから大丈夫らしい