Tbpgr Blog

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

メタプログラミングRuby | 魔術 | 動的メソッド

概要

動的メソッド

内容

実行時にメソッドを作成します。

サンプル

a-zの中から3-6文字を組み合わせて10個のメソッドを動的に作成します。
クラスはロードするたびにことなるメソッドを生成します。

# encoding: utf-8
require "pp"

puts 97.chr
puts 122.chr

class RandHoge
  10.times do
    method_name = ""
    rand(3..6).times do
      method_name << rand(97..122).chr
    end
    define_method "my_#{method_name}".to_sym do
      method_name
    end
  end
end

methods= RandHoge.instance_methods.grep /my_/
# ランダムで作成した10個のメソッドを確認
print methods
puts

hoge = RandHoge.new

# ランダムで作成した10個のメソッドをすべて実行します。
outputs = []
methods.each do |method_name|
  outputs << hoge.method(method_name.to_s).call
end
print outputs
実行結果
a
z
[:my_tpddl, :my_ocpcx, :my_zxi, :my_ogdcid, :my_nrkdoz, :my_dltpj, :my_pmgica, :my_ijq, :my_udlp, :my_xqppt]
["tpddl", "ocpcx", "zxi", "ogdcid", "nrkdoz", "dltpj", "pmgica", "ijq", "udlp", "xqppt"]