Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 Ruby Cookbook | 文字列評価によるメタプログラミング

パンくず

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