DelegateClass和类似方法在哪个对象/类上存在?

时间:2011-08-30 11:33:18

标签: ruby metaprogramming

对不起的头衔很抱歉,但我有点失落。

我正在试图找出哪些对象/类实时方法(如DelegateClass)以及这些类型的方法的术语是什么。我正在阅读 Metaprogramming Ruby ,在书中,这些方法通常被称为Mimic Methods,但是在网上搜索会得到各种结果,所以我想知道是否有一个更好的名字它们。

我检查了DelegateClass的源代码,我认为它已添加到Object中,但它不存在。我可以看到同一个rb文件中的类Delegator和SimpleDelegator是添加作为常量(虽然我不确定它们是如何添加的)。

谢谢!

2 个答案:

答案 0 :(得分:3)

刚刚找到答案。它是Object

中的私有方法
ruby-1.9.2-p290 :033 > Object.private_instance_methods(false).grep /Dele/
 => [:DelegateClass]

修改

我发现我需要理解的是在给定的上下文中当前的类是什么?

答案 1 :(得分:0)

仔细查看文件。

def DelegateClass(superclass)
  klass = Class.new(Delegator)
  ...

并使用

method(:DelegateClass).owner

找到它所在的类。正如评论中所提到的,Module上的私有实例方法包含在Object上定义的任何内容。

所以不,DelegateClass()不是一个特殊的方法,除了以大写形式调用(这使它看起来像一个常量)。它只返回一个可以继承的现场创建的匿名类。