Project

General

Profile

Actions

Bug #21396

open

Set#initialize should call Set#add on items passed in

Added by tenderlovemaking (Aaron Patterson) 3 days ago. Updated 1 day ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:122411]

Description

class Foo < Set
  def add(item) = super(item.bytesize)
end

x = Foo.new(["foo"])
p x
p x.include?(3)

On Ruby 3.4 the output is this:

> ruby -v test.rb
ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [arm64-darwin24]
#<Foo: {3}>
true

On Ruby master the output is this:

> make run
./miniruby -I./lib -I. -I.ext/common  -r./arm64-darwin24-fake  ./test.rb 
#<Set: {"foo"}>
false

The bug is that initialize is not calling add for the elements passed in, so the subclass doesn't get a chance to change them.

I've sent a PR here: https://github.com/ruby/ruby/pull/13518


Related issues 1 (1 open0 closed)

Related to Ruby - Bug #21375: Set[] does not call #initializeOpenActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0