Feature #8626

Add a Set coercion method to the standard lib: Set(possible_set)

Added by Jim Gay about 2 years ago. Updated over 1 year ago.



I'd like to be able to take an object that may already be a Set (or not) and ensure that it is one

For example:

set1 = Set.new
set2 = Set(set1)
set3 = Set(nil)
assert set1.equal?(set2)
assert_instance_of(Set, set3)

This is different from the behavior of Set.new in that it will return the same set rather than creating a new one

set1 = Set.new
set2 = Set.new(set1) # <--- completely new object in memory
set2 = Set(set1) # <--- same object from memory

My thoughts about the implementation are simple:

def Set(possible_set)
  possible_set.is_a?(Set) ? possible_set : Set.new(possible_set)

I'm not sure if there are edge cases to unexpected behavior that I haven't thought of and I'm wondering if it ought to have a Set.try_convert as well


#1 Updated by Jim Gay about 2 years ago

I've created a pull request for MRI here https://github.com/ruby/ruby/pull/359

Also available in: Atom PDF