動的にメソッドを生成する
メモです.
Module#define_methodを使用する.
ソースコード
class MyClass
def self.create_methods(method_names)
method_names.each do |n|
define_method "get_#{n}" do |p|
"#{p}さん,#{n}です,おぼえてますか?"
end
end
end
define_method :get_c do |p|
"#{p}さん!?"
end
end
method_names = ["a", "b"]
MyClass.create_methods(method_names)
c = MyClass.new
puts c.get_a("Ruby") # => Rubyさん,aです,おぼえてますか?
puts c.get_b("JS") # => JSさん,bです,おぼえてますか?
puts c.get_c("Rails") # => Railsさん!?
define_methodを使う箇所は,行3のようにメソッド内の場合はselfなメソッドでなければならなかった.define_methodがModuleクラスのプライベートメソッドだからだろうか?
別の方法としては,行18のメソッド定義のdefと同レベルの位置(なんていうスペースなんだろう?)でもできる.