Я знаю, как использовать 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
в уже созданном объекте, если это возможно.
Заранее спасибо.
ДОПОЛНЕНИЕ
Я перешел к статье, указанной ниже (спасибо!), и тогда я понял, что есть еще один способ сделать это, который не упоминался в этой статье. Поэтому я добавил еще один ответ в ту статью с методологией, о которой я думал. Вот он, на примере, который я изложил выше...
class << obj
include Enumerable # or any other module
end
Это добавит все методы из Enumerable
в мой объект.