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

问题描述 投票:0回答:2

抱歉标题不好,但我有点迷失了。

我试图找出哪些对象/类的实时方法(例如 DelegateClass)以及这些类型的方法的术语是什么。我正在阅读 Metaprogramming Ruby,在书中,这些方法通常称为模仿方法,但在互联网上搜索会给出各种结果,所以我想知道是否有更好的名称。

我检查了DelegateClass的源代码,我假设它已添加到Object中,但它不在那里。我可以看到位于同一个 rb 文件中的 Delegator 和 SimpleDelegator 类作为常量添加(尽管我不确定它们是如何添加的)。

ruby metaprogramming
2个回答
3
投票

刚刚找到答案。这是 Object 中的私有方法

ruby-1.9.2-p290 :033 > Object.private_instance_methods(false).grep /Dele/
 => [:DelegateClass]

编辑

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


0
投票

仔细查看文件。

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

并使用

method(:DelegateClass).owner

找到它所在的班级。正如评论中提到的,模块上的私有实例方法包含对象上定义的任何内容。

所以不,除了以大写形式调用(这使得它看起来像一个常量)之外,

DelegateClass()
在任何方面都不是一个特殊的方法。它只是返回一个当场创建的可以继承的匿名类。

© www.soinside.com 2019 - 2024. All rights reserved.