На самом деле вы не переопределили класс Point, вы снова открыли его.Небольшой фрагмент кода, иллюстрирующий разницу:
class Point
def foo
end
end
class Point
def bar
end
end
Теперь Point
имеет два метода: foo
и bar
.Таким образом, второе определение Point
не заменило предыдущее определение, оно добавило к нему.Это возможно как в сценариях ruby, так и в irb (это также возможно с классами из стандартной библиотеки, а не только с вашей).
Также возможно действительно переопределить классы, используя remove_const
для удаленияпредыдущая привязка имени класса сначала:
class Point
def foo
end
end
Object.send(:remove_const, :Point)
class Point
def bar
end
end
Point.instance_methods(false) #=> ["bar"]