2010-06-01 9 views
0

En classe Foo Je voudrais inclure la méthode Bar sous certaines conditions:Inclusion Ruby Module dans les méthodes

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 

est une façon d'obtenir le include-il plus propre (et plus claire) dans la méthode sans avoir à faire à l'intérieur de la classe singleton?

Répondre

11

extend est l'équivalent de include dans une classe singleton:

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