Ruby on rails 什么';发送:包含到类和在第二个类定义中直接定义方法之间的区别是什么?
最近,我不得不向Redmine的核心类添加一个方法。我无法使用继承,所以我做了如下操作:Ruby on rails 什么';发送:包含到类和在第二个类定义中直接定义方法之间的区别是什么?,ruby-on-rails,ruby,inheritance,mixins,redmine-plugins,Ruby On Rails,Ruby,Inheritance,Mixins,Redmine Plugins,最近,我不得不向Redmine的核心类添加一个方法。我无法使用继承,所以我做了如下操作: require_dependency 'time_entry_query' class TimeEntryQuery < Query def my_new_method(foo, bar) end end 在应用程序初始化的某个地方: SomeClass.send(:include, Patches::SomeClassPatch) unless SomeClass.include?
require_dependency 'time_entry_query'
class TimeEntryQuery < Query
def my_new_method(foo, bar)
end
end
在应用程序初始化的某个地方:
SomeClass.send(:include, Patches::SomeClassPatch) unless SomeClass.include? (Patches::SomeClassPatch)
这两种方法有什么区别?我应该使用哪种方法?有两种区别:
my_new_method
”是从哪里来的,我看一下,比如说,TimeEntryQuery.祖先
或TimeEntryQuery.instance_method(:my_new_method).owner
,它将返回Patches::SomeClassPatch
。所以我知道我必须在某个地方寻找一个名为lib/patches/some_class\u patch.rb
的文件,以找到它可能的定义位置。(我也可以尝试source\u location
,但这并不总是可靠的。)TimeEntryQuery
中已经定义了my\u new\u方法
,您的第一个选项将覆盖它,而在第二个选项中,您的方法将成为该方法的super
方法。IOW:使用第二个选项,除非已经存在的方法调用super
,否则不会调用新方法第二个例子是Ruby动态编程行为。。
SomeClass.send(:include, Patches::SomeClassPatch) unless SomeClass.include? (Patches::SomeClassPatch)