0

クラスでは、特定の条件下でFooメソッドを含めたいと思います。Bar

 module Bar
   def some_method
     "orly"
   end
 end

 class Foo
   def initialize(some_condition)
     if !some_condition
       "bar"
     else
       class << self; include Bar; end
     end
   end
 end

includeシングルトンクラス内で実行しなくても、メソッドでを実現するためのよりクリーンな(そしてより明確な)方法はありますか?

4

1 に答える 1

11

extendincludeシングルトンクラスと同等です。

module Bar
  def some_method
    puts "orly"
  end
end

class Foo
  def initialize(some_condition)
    extend(Bar) if some_condition
  end
end

Foo.new(true).some_method # => "orly"
Foo.new(false).some_method # raises NoMethodError
于 2010-06-01T23:09:25.283 に答える