, name module - name, . Animal Cat , . , Module#name, Adapter::Cat .
, . module ( self, include ) , speak.
:
module Adapter
module Dog
def self.speak(name)
puts "#{name} says: woof!"
end
end
end
class Animal
attr_accessor :name
attr_reader :adapter
def initialize(name)
@name = name
self.adapter = :dog
end
def speak
self.adapter.speak(@name)
end
def adapter=(adapter)
@adapter = Adapter.const_get(adapter.to_s.capitalize)
end
end
, , . Ruby-esque:
module Adapter
module Dog
def speak
puts "#{name} says: woof!"
end
end
end
class Animal
attr_accessor :name
attr_reader :adapter
def initialize(name)
@name = name
self.adapter = :dog
end
def adapter=(adapter)
@adapter = Adapter.const_get(adapter.to_s.capitalize)
extend(@adapter)
end
end