Fed*_*les 0 ruby metaprogramming mixins
在课堂上,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
Run Code Online (Sandbox Code Playgroud)
是否有更清晰(更清晰)的方法来实现include方法而不必在单例类中进行?
Mar*_*off 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
Run Code Online (Sandbox Code Playgroud)