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ハッカーにRubyをLispの方言と紹介しても納得してくれるだろう」と書いておられましたが...
その深淵を垣間見たような気がします(震え声
参考もと
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (16件) を見る
- module Kernel