4
class Product < ActiveRecord::Base
set_table_name 'produce'
end
module ActiveRecord
class Base
def self.set_table_name name
define_attr_method :table_name, name
end
def self.define_attr_method(name, value)
singleton_class.send :alias_method, "original_#{name}", name
singleton_class.class_eval do
define_method(name) do
value
end
end
end
end
set_table_name
がこの例でどのように定義されるかをご理解いただきたいと思います。このメタプログラミングの例では、singleton_class.sendとsingleton_class.class_evalの目的は何ですか?
なぜsingleton_class.send
が必要ですか?
ではなくsingleton_class
を呼び出すのはなぜですか?class_eval
アーカイブされたバージョン:http://web.archive.org/web/20090615044849/http://whytheluckystiff.net/articles/seeingMetaclassesClearly .html – jordanpg
ここにアーカイブされていないバージョン:http://dannytatom.me/metaid/ – alfasin