Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

evalで動的にメソッドを追加する(その1)

evalを使うと、式を実行することができます。

> eval "1 + 1"
#=> 2

この程度だとあまり旨みがありませんが...
なんと、これを使うことで動的にメソッドを定義することもできます

%w(hoge huga).each do |val|
eval <<-EOM
def method_#{val}
%q( From the #{val}. )
end
EOM
end
#=> ["hoge", "huga"]
> method_hoge
#=> " From the hoge. "
> method_huga
#=> " From the huga. "
> Kernel.method(:method_hoge)
#=> #<Method: Module(Object)#method_hoge>

ハッカーと画家にてポール・グレアム氏が
LispハッカーRubyLispの方言と紹介しても納得してくれるだろう」と書いておられましたが...
その深淵を垣間見たような気がします(震え声

参考もと