Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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の方言と紹介しても納得してくれるだろう」と書いておられましたが...
その深淵を垣間見たような気がします(震え声

参考もと