最近我不得不在 Redmine 的核心类中添加一个方法。我无法使用继承,所以我做了这样的事情:
require_dependency 'time_entry_query'
class TimeEntryQuery < Query
def my_new_method(foo, bar)
end
end
它工作得很好——我的方法被添加到所有新对象中。但是,我看到有人在他们自己的模块中声明了新方法,然后将 :include 发送到类,所以它变成了一个 mixin。这是一个例子:
module Patches
module SomeClassPatch
def my_new_method
end
end
在应用程序初始化的某个地方:
SomeClass.send(:include, Patches::SomeClassPatch) unless SomeClass.include? (Patches::SomeClassPatch)
这两种方法有什么区别,我应该使用哪一种?