此问题已经在这里有了答案:
我知道如何使用include
将混合添加到Ruby中的类。但是,我想向已实例化对象添加一个或多个方法。有可能吗?
例如,Rack::File::Iterator
类的行为类似于迭代器,但它并不继承自Enumerable
。这意味着即使它包含reduce
方法,它也没有each
方法。
我想将reduce
方法添加到已经实例化的Rack::File::Iterator
对象(在这里我将其称为“ obj”,以便可以执行以下操作...
result = obj.reduce { |a,b| a + b }
[如果我能以某种方式将include
模块Enumerable
插入已经实例化的obj
,我认为这将完成我想要的。
我仅以Rack::File::Iterator
为例。我正在寻找一种通用解决方案,该解决方案可以与任何类的实例化对象一起使用。此外,我也仅以reduce
为例。我希望它可以与我希望添加到对象中的任何方法一起使用。
是,我知道如何编写自己的reduce
函数,可以将obj
和一个块作为参数传递给该函数。但是,如果可能的话,我宁愿对已经实例化的对象进行这种动态include
处理。
谢谢你。
ADDENDUM
我进入了下面引用的文章(谢谢!),然后我意识到还有另一种方法可以做到这一点,而本文中没有提到。因此,我以我认为的方法为该文章添加了另一个答案。在这里,使用我上面概述的示例...
class << obj
include Enumerable # or any other module
end
这会将Enumerable
中的所有方法添加到我的对象中。