Наблюдали некоторое неожиданное поведение, когда область class
появляется в другом определении класса:
Такая область переопределяет все определение класса.
Однако тот же код просто добавит новый метод в этот класс, как показано в кодах ниже.
Почему Ruby сконструирован таким образом, если он не выходит за рамки интуиции?
require 'pp'
def pp_methods obj
pp obj.methods - nil.methods
end
#first definition of A
class A
def method1
end
end
#add method3 to A
class A
def method3
end
end
class B
#class A got overridden within class B
class A
def method2
end
end
def initialize
a=A.new
pp_methods a # => [:method2]
end
end
a1=A.new
pp_methods a1 # => [:method1,:method3]
b=B.new
a2=A.new
pp_methods a1 # => [:method1,:method3]
pp_methods a2 # => [:method1,:method3]