1

を使用して、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

4

1 に答える 1

6

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
于 2011-06-20T19:27:59.827 に答える