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.
(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.