caseによる場合わけ
こんなコードがあったとする
def foo case @param['mode'] when 'error' ...... when 'input' ...... else ..... end end
処理が増えると関数が大きくなるので、あまりうれしくない。あと、派生したクラスで処理を追加するのが結構めんどうになる。
そこで、Object#sendを使ってやる。
def foo if self.respond_to? "on_#@param['mode']:" then self.send "on_#@param['mode']:" else on_default end end def on_error ... end def on_input ... end def on_default ... end
ちょっと迷っていること。これはCGIのコードの一部で、@paramはCGIに渡されたパラメータ。なんとなく、このコードはセキュリティホールになりそうな雰囲気がある。いちおう、任意のメソッドを呼び出されないように'on_xxx'という形式にしているから大丈夫だとは思うんだけど、なんとなく不安。