module Comprehension::ProcExtension

Public Instance Methods

comprehension(first_enum, *rest_enums) { |self.(x)| ... } click to toggle source
# File lib/comprehension.rb, line 9
def comprehension(first_enum, *rest_enums)
  return lazy_comprehension(first_enum, *rest_enums).map(&:itself) unless block_given?

  if rest_enums.empty?
    first_enum.each {|x| yield self.(x) }
  else
    first_enum.each do |x|
      ->(*rest_elts) { yield(self.(x, *rest_elts)) }.comprehension(*rest_enums)
    end
  end
end
lazy_comprehension(first_enum, *rest_enums) click to toggle source
# File lib/comprehension.rb, line 5
def lazy_comprehension(first_enum, *rest_enums)
  enum_for(:comprehension, first_enum, *rest_enums)
end