向已实例化的对象添加方法? [重复]

问题描述 投票:1回答:1

此问题已经在这里有了答案:

我知道如何使用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中的所有方法添加到我的对象中。

ruby iterator instantiation mixins enumerable
1个回答
0
投票

是的,有可能。

Add method to an instanced object

© www.soinside.com 2019 - 2024. All rights reserved.