2010-06-01 3 views
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 в методе, не делать это внутри одноэлементного класса?

ответ

11

extend является эквивалентом include в одноплодном классе:

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 
Смежные вопросы