【问题标题】:Ruby: Execute code for every subclassRuby:为每个子类执行代码
【发布时间】:2023-03-21 15:08:01
【问题描述】:

给定一个父类,有没有办法在加载时为每个子类插入代码?即。

鉴于:ParentClass,我该如何插入这样的代码:

class ChildClass < ParentClass
   execute_function

   ...
end

对于ParentClass的所有子类?

【问题讨论】:

  • 如果这些类已经加载了怎么办?这段代码应该做什么?
  • @SergioTulentsev Err,如果没有加载父类,如何加载类?
  • @meagar:现在是深夜,我在问一些愚蠢的问题 :)

标签: ruby inheritance metaprogramming subclass


【解决方案1】:

ParentClass中重写继承的方法

class ParentClass
   def self.inherited(subclass)
      execute_function
      super
   end
   ...
end

见:http://ruby-doc.org/core-2.0/Class.html#method-i-inherited

【讨论】:

  • 哇...花了这么多时间寻找这个。为了安全起见,使用super(subclass) 是正确的吗?
  • 您可以,但这不是必需的。不带参数的super 将使用相同的参数调用父类中同名的方法。
  • Russ Olsen 在他的书 Eloquent Ruby 中有一个使用这个钩子的有趣例子。每个子类读取不同类型的文件,并且父类的结构使得添加新子类时不需要对其进行更改。超级棒,当然只有当你希望 ParentClass 的父母也被告知时才需要。
  • 但是,您在这里获得的子类将不完整。例如,如果您在子类中定义了类方法或类常量,则此处将不可用。
  • @trcarden,怎么可能只在子类被读取后才执行代码?
猜你喜欢
  • 2011-07-27
  • 2017-07-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多