Как наследование работает в Ruby?
По словам Дэйва Томаса вего разговор о Ruby Object Modelнетметоды класса " в рубине. Есть только разница между тем, является ли получатель метода "объект класса " илиэкземпляр объекта ".
class Dave
def InstaceMethod ### will be stored in the current class (Dave)
puts "Hi"
end
class < self ### Creates an eigenclass, if not created before
def say_hello
puts "Hello"
end
end
end
[:say_hello, :metaclass]
Теперь о наследстве.
class B < Dave
end
p B.say_hello
# => "Hello"
p B.ancestors
# => [B, Dave, Object, Kernel, BasicObject]
p B.class.instance_methods(false)
# => [:allocate, :new, :superclass]
Следующее создаст новый собственный класс для:B
p B.metaclass.ancestors
# => [Class, Module, Object, Kernel, BasicObject]
p B.metaclass.instance_method(false)
# => []
Как быB.ancestors
а такжеB.metaclass.ancestors
выглядеть, когда собственные классы тоже включены? Методsay_hello
хранится в собственном классе, (который я предполагаюB.class
наследует) но где это?
Так как есть две цепочки предков (B.ancestors
а такжеB.class.ancestors
или жеB.metaclass.ancestors
) как на самом деле происходит наследование?