Eigentlich haben Sie die Point-Klasse nicht neu definiert, Sie haben sie wieder geöffnet. Ein kleiner Code-Schnipsel, den Unterschied zu verdeutlichen:
class Point
def foo
end
end
class Point
def bar
end
end
Jetzt Point
zwei Methoden hat: foo
und bar
. Die zweite Definition von Point
hat also die vorherige Definition nicht ersetzt, sondern hinzugefügt. Dies ist sowohl in Ruby-Skripten als auch in irb möglich (dies ist auch mit Klassen aus der Standard-Bibliothek möglich, nicht nur mit Ihren eigenen).
Es ist auch möglich, wirklich Klassen neu zu definieren, indem remove_const
mit der vorherige Bindung des Klassennamen zu entfernen, zuerst:
class Point
def foo
end
end
Object.send(:remove_const, :Point)
class Point
def bar
end
end
Point.instance_methods(false) #=> ["bar"]