Deletes every element of the set for which block evaluates to false, and
returns self. Returns an enumerator if no block is given.
# File lib/set.rb, line 391
def keep_if
block_given? or return enum_for(__method__) { size }
# @hash.keep_if should be faster, but using it breaks the order of
# enumeration in subclasses.
reject { |o| yield o }.each { |o| @hash.delete(o) }
self
end