Regression in Hash#reject in Ruby 2.1.1
Geschrieben von sorah am 10.3.2014
Übersetzt von Quintus
In Ruby 2.1.0 und früher gab die reject-Methode jeder Klasse, die
von Hash erbt, ein Objekt der eigenen Klasse zurück.
In Ruby 2.1.1 hat sich dieses Verhalten versehentlich in der Weise
verändert, dass stets ein gewöhnliches Hash-Objekt anstelle eines
Objekts der Subklasse zurückgegeben wird.
class SubHash < Hash
end
p Hash.new.reject { }.class
#=> 2.1.0: Hash, 2.1.1: Hash
p SubHash.new.reject { }.class
#=> 2.1.0: SubHash, 2.1.1: Hash(Um es ganz genau zu sagen: eigene Erweiterungen etwa in Form von Instanzvariablen werden ebenfalls nicht übernommen.)
Ruby 2.1.1 sollte derartige Verhaltensänderungen nicht enthalten, weil wir mit der Veröffentlichung von Ruby 2.1.0 unsere Versionierungs-Richtlinien geändert haben und Ruby 2.1.1 somit ein Patchlevel-Release ist, das die Rückwärtskompatibilität beibeihalten sollte.
Diese Regression betrifft möglicherweise viele Bibliotheken;
Beispiele sind etwa Rails’ HashWithIndifferentAccess und
OrderedHash. Sie funktionieren zurzeit nicht:
Rails-Ticket #14188.
In Ruby 2.1.2 wird das ursprüngliche Verhalten von 2.1.0 wiederhergestellt werden, ab Ruby 2.2.0 wird dieses neue Verhalten jedoch voraussichtlich der Standardfall sein: Feature #9223. Wir empfehlen Ihnen daher, Ihren Code der neuen Situation anzupassen.
Dieser Unfall wurde durch einen fehlenden Backport-Commit verursacht. Weitere Informationen dazu können Sie unter http://blog.sorah.jp/2014/03/10/hash-reject-regression-in-ruby211 finden.
Wir entschuldigen uns für die Unannehmlichkeiten und danken Ihnen für Ihre Unterstützung.
Aktuelle Neuigkeiten
Ruby 3.4.2 veröffentlicht
Ruby 3.4.2 wurde veröffentlicht.
Geschrieben von k0kubun am 14.2.2025
Ruby 3.2.7 veröffentlicht
Ruby 3.2.7 wurde veröffentlicht.
Geschrieben von nagachika am 4.2.2025
Ruby 3.3.7 veröffentlicht
Ruby 3.3.7 wurde veröffentlicht.
Geschrieben von k0kubun am 15.1.2025
Ruby 3.4.0 veröffentlicht
Wir freuen uns, die Veröffentlichung von Ruby 3.4.0 bekannt zu geben. Ruby 3.4 führt den it-Blockparameter ein, ändert Prism zum Standardparser, bietet Happy Eyeballs Version...
Geschrieben von naruse am 25.12.2024