oop/singleton_on_a_collection_no_parens.rb

tests/_examples/oop/singleton_on_a_collection_no_parens.rb in the metorex repository.

# A collection is held by reference, so each one carries methods of its own.
held = [1, 2]
def held.doubled
  map { |number| number * 2 }
end
p held.doubled
p held.respond_to? :doubled
p [1, 2].respond_to?(:doubled)

# `clone` carries those methods over where `dup` leaves them behind.
p held.clone.respond_to? :doubled
p held.dup.respond_to? :doubled

# A subclass of a collection answers its own methods rather than the ones
# the collection would answer.
class Bag < Hash
  def size
    77
  end
end
bag = Bag.new
bag["a"] = "b"
p bag.size
p bag.length

Output:

[2, 4]
true
false
true
false
77
1