ruby 中的几个 类 添加方法

Adding a method to several classes in ruby

我想给几个 class 添加一个方法。但是我遗漏了一些我不知道如何称呼它的东西所以我无法搜索它

我想做类似的事情

["Class1", "Class2"].each do |klass|
 class klass.constantize
  def my_new_method
   ....
  end
 end
end

显然代码不起作用,但您明白了。如何使 klass 成为 class 名称以便我可以声明该方法?

使用const_get and class_eval:

class A; 
  def a; 
    puts :a; 
  end; 
end
Kernel.const_get("A").class_eval { def b; puts :b; end  }

pry(main)> A.new.b
b
=> nil

将功能添加到多个 classes 通常是使用 mixins。 Module#prepend 是你的朋友。这样,如果方法 覆盖 扩展 class.

中的现有方法,就可以调用 super
["Class1", "Class2"].each do |klass|
  Kernel.const_get(klass).prepend(Module.new do
    def my_new_method
      ....
    end
  end)
end

或者,您可以预先声明此模块并调用 prepend 并在其中传递模块名称。

Mixin =
  Module.new do
    def my_new_method
      ....
    end
  end

["Class1", "Class2"].each do |klass|
  Kernel.const_get(klass).prepend(Mixin)
end

或者,

module Mixin
  def my_new_method
    ....
  end
end

["Class1", "Class2"].each do |klass|
  Kernel.const_get(klass).prepend(Mixin)
end