【发布时间】:2020-02-20 06:33:23
【问题描述】:
我知道如何使用 include 将 mixins 添加到 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 放入已经实例化的对象中。
提前谢谢你。
附录
我查看了下面引用的文章(谢谢!),然后我意识到还有另一种方法可以做到这一点,而该文章中没有提到。因此,我用我想到的方法为那篇文章添加了另一个答案。在这里,使用我上面概述的示例...
class << obj
include Enumerable # or any other module
end
这会将Enumerable 中的所有方法添加到我的对象中。
【问题讨论】:
标签: ruby iterator instantiation mixins enumerable