Динамически добавлять (предопределенный) метод экземпляра в Ruby - PullRequest
0 голосов
/ 20 июня 2011

Я вижу, как динамически добавлять метод в экземпляр в Ruby с помощью def [instance].[methodname]; [...]; end.

Однако я заинтересован в присоединении метода, существующего в другом месте, к данному экземпляру. например,

def my_meth
  puts self.foo
end

class MyCls
  attr_accessor :foo
end

my_obj = MyCls.new
my_obj.my_meth

Как можно просто присоединить my_meth к my_obj, чтобы сработал вызов метода в последней строке предыдущего кода?

1 Ответ

5 голосов
/ 20 июня 2011

Вы можете использовать include или extend, чтобы добавить модуль в ваш класс, например.extend:

module Foo
  def my_meth
    puts self.foo
  end
end

class MyCls
  attr_accessor :foo
end

my_obj = MyCls.new
my_obj.extend(Foo)
my_obj.foo = "hello"
my_obj.my_meth

Если у вас нет необходимости добавлять модуль на лету, как это, обычно лучше include ваш модуль так:

class MyCls
   include Foo
   attr_accessor :foo
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...