- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
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
?
为什么 class_eval
是在 singleton_class
而不是 self
上调用的?
最佳答案
使用“singleton_class”的原因是因为您不想修改 ActiveRecord::Base 类,而是 Product 类。
有关元编程和单例类的更多信息,请点击此处:http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
关于ruby - 这个元编程示例中的 singleton_class.send 和 singleton_class.class_eval 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1184935/
class Product < ActiveRecord::Base set_table_name 'produce' end module ActiveRecord class Base
我在元类中定义了方法specific_data1和specific_data2,并期望这些方法属于单例类: class User def User.specific_data1 "user
Module#singleton_class 的逆运算是什么?即,给定一个单例类,我怎样才能得到它是单例的模块? 最佳答案 您可以使用 ObjectSpace#each_object为此: modul
当我向 singleton_class 添加验证时,它似乎被分配给了基类,并且它不会触发任何一个。 class Example attr_accessor :title, :some_boolea
为什么 Foo.val 在调用 Foo.set 之前返回 nil 而不是 "foo"? 是否有任何机制可以在类评估时初始化 @val? @val = "foo" 存储在哪个范围内? class Foo
假设有人希望创建一个具有类实例变量、该变量的 getter、类方法和实例方法的类。人们可能会写下以下内容。 class C @v = 1 def hi 'hi' end cla
我这样做有什么区别 class T def initialize self.class.class_eval do def test return self.cl
我们有一个应用程序使用 Sequel gem 连接到数据源,执行一些工作,然后返回一个结果,该结果具有许多附加到该对象的 singleton_class 的便捷方法。在 ruby 2.3 中,此代
根据定义,一个对象的单例类也继承了该对象父类(super class)的单例类。 ruby 中的 BasicObject 没有任何父类(super class),因为它是最基本的级别类 >> Basi
我是一名优秀的程序员,十分优秀!