抱歉标题不好,但我有点迷失了。
我试图找出哪些对象/类的实时方法(例如 DelegateClass)以及这些类型的方法的术语是什么。我正在阅读 Metaprogramming Ruby,在书中,这些方法通常称为模仿方法,但在互联网上搜索会给出各种结果,所以我想知道是否有更好的名称。
我检查了DelegateClass的源代码,我假设它已添加到Object中,但它不在那里。我可以看到位于同一个 rb 文件中的 Delegator 和 SimpleDelegator 类作为常量添加(尽管我不确定它们是如何添加的)。
刚刚找到答案。这是 Object 中的私有方法
ruby-1.9.2-p290 :033 > Object.private_instance_methods(false).grep /Dele/
=> [:DelegateClass]
编辑
我发现我需要理解的是 当前班级是什么?在给定的上下文中。
仔细查看文件。
def DelegateClass(superclass)
klass = Class.new(Delegator)
...
并使用
method(:DelegateClass).owner
找到它所在的班级。正如评论中提到的,模块上的私有实例方法包含对象上定义的任何内容。
所以不,除了以大写形式调用(这使得它看起来像一个常量)之外,
DelegateClass()
在任何方面都不是一个特殊的方法。它只是返回一个当场创建的可以继承的匿名类。