Method: Weak::Set#select!

Defined in:
lib/weak/set.rb

#select! {|element| ... } ⇒ Enumerator, ... Also known as: filter!

Deletes every element from ‘self` for which the given block evaluates to a falsey value.

Equivalent to #keep_if, but returns ‘nil` if no changes were made.

If no block is given, an ‘Enumerator` is returned instead.

Yields:

  • (element)

    calls the given block once for each element in the set

Yield Parameters:

  • element (Object)

    the element to check

Returns:

  • (Enumerator, self, nil)

    ‘self` if a block was given and some element(s) were deleted, `nil` if a block was given but nothing was deleted, or an `Enumerator` if no block was given.

See Also:


639
640
641
642
643
644
645
646
647
648
# File 'lib/weak/set.rb', line 639

def select!(&block)
  return enum_for(__method__) { size } unless block_given?

  deleted_anything = false
  each do |obj|
    deleted_anything = true if !yield(obj) && delete?(obj)
  end

  self if deleted_anything
end