W rzeczywistości nie zdefiniowałeś ponownie klasy Punkt, ponownie ją otworzyłeś. Trochę fragment kodu, aby zilustrować różnicę:
class Point
def foo
end
end
class Point
def bar
end
end
Teraz Point
posiada dwie metody: foo
i bar
. Tak więc druga definicja Point
nie zastąpiła poprzedniej definicji, została do niej dodana. Jest to możliwe w skryptach ruby oraz w irb (jest to również możliwe w przypadku klas ze standardowej biblioteki, nie tylko własnej).
Możliwe jest również, aby naprawdę przedefiniować zajęcia, korzystając remove_const
usunąć poprzedni wiązanie pierwszej nazwy klasy:
class Point
def foo
end
end
Object.send(:remove_const, :Point)
class Point
def bar
end
end
Point.instance_methods(false) #=> ["bar"]