gpt4 book ai didi

ruby - 这个元编程示例中的 singleton_class.send 和 singleton_class.class_eval 的目的是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:15 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com