パンくず
Ruby Cookbook
文字列評価によるメタプログラミング
概要
文字列評価によるメタプログラミング
内容
method_defineで定義したメソッドと同様のことが文字列評価で定義可能です。
利用するメソッドは
Module#module_eval
です。
method_defineと異なる点は、通常のメソッド定義に近い形で動的にメソッドを定義出来るため
可読性が上がることです。
サンプルコード
# encoding: Windows-31J require "pp" class HyperHoge def print_hxge(word) puts "h#{word}ge" end %w{a i u e o}.each do |word| module_eval %{ def h#{word}ge self.print_hxge("#{word}") end } end end hyper_hoge = HyperHoge.new puts "methods = #{hyper_hoge.public_methods(false)}" hyper_hoge.public_methods(false).each do |method_| each_method = hyper_hoge.method(method_) (each_method.arity == 1) ? each_method.call("x"):each_method.call end
出力
methods = [:print_hxge, :hage, :hige, :huge, :hege, :hoge] hxge hage hige huge hege hoge