Regression von Hash#reject in Ruby 2.1.1
Gepostet von sorah am 10. Mär 2014
In Ruby 2.1.0 oder früher gibt die reject-Methode in jeder Klasse, die von Hash erbt, ein Objekt ihrer eigenen Klasse zurück. In Ruby 2.1.1 hat sich dieses Verhalten versehentlich geändert und gibt immer ein normales Hash-Objekt zurück, nicht von der geerbten Klasse.
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(Genauer gesagt, zusätzliche Zustände wie Instanzvariablen usw. werden ebenfalls nicht kopiert.)
Ruby 2.1.1 sollte keine solchen Verhaltensänderungen enthalten, denn mit der Veröffentlichung von Ruby 2.1.0 haben wir unsere Versionierungsrichtlinie geändert, sodass Ruby 2.1.1 eine Patch-Level-Release ist und keine Abwärtskompatibilität brechen sollte.
Diese Regression könnte potenziell viele Bibliotheken beeinträchtigen, ein solcher Fall sind Rails' HashWithIndifferentAccess und OrderedHash. Sie sind kaputt: Rails' Issue #14188.
Dieses Verhalten wird in Ruby 2.1.2 auf das Verhalten von 2.1.0 zurückgesetzt, wird aber voraussichtlich das Standardverhalten für Ruby 2.2.0 sein: Feature #9223. Daher empfehlen wir, Ihren Code anzupassen, um dieses Verhalten zu erwarten.
Dieser Unfall wurde durch einen fehlenden Backport-Commit verursacht. Weitere Details finden Sie unter http://blog.sorah.jp/2014/03/10/hash-reject-regression-in-ruby211.
Entschuldigen Sie etwaige Unannehmlichkeiten und danken wir Ihnen für Ihre Unterstützung.
Aktuelle Nachrichten
Ruby 4.0.0 veröffentlicht
Wir freuen uns, die Veröffentlichung von Ruby 4.0.0 bekannt zu geben. Ruby 4.0 führt „Ruby Box“ und „ZJIT“ ein und bringt viele Verbesserungen mit sich.
Veröffentlicht von naruse am 25. Dez 2025
Ein neuer Look für Rubys Dokumentation
Nach dem Redesign von ruby-lang.org gibt es weitere Neuigkeiten zur Feier des 30-jährigen Jubiläums von Ruby: docs.ruby-lang.org hat ein komplett neues Erscheinungsbild mit Aliki – dem neuen Standard-Theme von RDoc.
Veröffentlicht von Stan Lo am 23. Dez 2025
Neues Website-Erscheinungsbild
Wir freuen uns, ein umfassendes Redesign unserer Website bekannt zu geben. Das Design für dieses Update wurde von Taeko Akatsuka erstellt.
Veröffentlicht von Hiroshi SHIBATA am 22. Dez 2025
Ruby 4.0.0 preview3 veröffentlicht
Wir freuen uns, die Veröffentlichung von Ruby 4.0.0-preview3 bekannt zu geben. Ruby 4.0 führt Ruby::Box und „ZJIT“ ein und bringt viele Verbesserungen mit sich.
Veröffentlicht von naruse am 18. Dez 2025