😺
[Bug #21396] Set#initialize で #add が呼ばれなくなったというバグ報告
[Bug #21396] Set#initialize should call Set#add on items passed in
- 次のように
Setをスーパークラスにしたサブクラスで#addが定義されている場合に開発版の Ruby 3.5-dev から#initializeで#addが呼ばれなくなったというバグ報告
class Foo < Set
def add(item) = super(item.bytesize)
end
x = Foo.new(["foo"])
p x
# Ruby 3.4 => #<Foo: {3}>
# Ruby 3.5 => #<Set: {"foo"}>
p x.include?(3)
# Ruby 3.4 => true
# Ruby 3.5 => false
- これは
Setが標準ライブラリからコアクラスに移動した影響みたいですね- もともと
Setは Ruby で実装されていたがコアクラスに移動されたことで CRuby の内部処理が直接呼び出されるようになったのが起因 - 参照: [Feature #21216] Implement Set as a core class
- もともと
- これが期待する挙動であるべき、というよりかは互換性を気にしているみたいですね
Discussion