chunk(*)
click to toggle source
Calls superclass method
def chunk(*)
super.lazy
end
drop(n)
click to toggle source
def drop(n)
n = Backports::coerce_to_int(n)
Lazy.new(self) do |yielder, *values|
data = yielder.backports_memo ||= {:remain => n}
if data[:remain] > 0
data[:remain] -= 1
else
yielder.yield(*values)
end
end.__set_inspect :drop, [n]
end
drop_while() { |*values| ... }
click to toggle source
def drop_while
raise ArgumentError, "tried to call lazy drop_while without a block" unless block_given?
Lazy.new(self) do |yielder, *values|
data = yielder.backports_memo ||= {:dropping => true}
yielder.yield(*values) unless data[:dropping] &&= yield(*values)
end.__set_inspect :drop_while
end
enum_for(method = :each, *args)
flat_map() { |*values| ... }
click to toggle source
def flat_map
raise ArgumentError, "tried to call lazy flat_map without a block" unless block_given?
Lazy.new(self) do |yielder, *values|
result = yield(*values)
ary = Backports.is_array?(result)
if ary || (result.respond_to?(:each) && result.respond_to?(:force))
(ary || result).each{|x| yielder << x }
else
yielder << result
end
end.__set_inspect :flat_map
end
grep(pattern) { |values| ... }
click to toggle source
def grep(pattern)
if block_given?
Lazy.new(self) do |yielder, *values|
values = values.first unless values.size > 1
yielder.yield(yield(values)) if pattern === values
end
else
Lazy.new(self) do |yielder, *values|
values = values.first unless values.size > 1
yielder.yield(values) if pattern === values
end
end.__set_inspect :grep, [pattern]
end
inspect()
click to toggle source
def inspect
suff = ''
suff << ":#{@method}" unless @method.nil? || @method == :each
suff << "(#{@args.inspect[1...-1]})" if @args && !@args.empty?
"#<#{self.class}: #{@receiver.inspect}#{suff}>"
end
lazy()
click to toggle source
map() { |*values| ... }
click to toggle source
def map
raise ArgumentError, "tried to call lazy map without a block" unless block_given?
Lazy.new(self) do |yielder, *values|
yielder << yield(*values)
end.__set_inspect :map
end
reject() { |values| ... }
click to toggle source
def reject
raise ArgumentError, "tried to call lazy reject without a block" unless block_given?
Lazy.new(self) do |yielder, *values|
values = values.first unless values.size > 1
yielder.yield(values) unless yield values
end.__set_inspect :reject
end
select() { |values| ... }
click to toggle source
def select
raise ArgumentError, "tried to call lazy select without a block" unless block_given?
Lazy.new(self) do |yielder, *values|
values = values.first unless values.size > 1
yielder.yield values if yield values
end.__set_inspect :select
end
take(n)
click to toggle source
def take(n)
n = Backports::coerce_to_int(n)
raise ArgumentError, 'attempt to take negative size' if n < 0
Lazy.new(n == 0 ? [] : self) do |yielder, *values|
data = yielder.backports_memo ||= {:remain => n}
yielder.yield(*values)
throw @@done if (data[:remain] -= 1) == 0
end.__set_inspect :take, [n], self
end
take_while() { |*values| ... }
click to toggle source
def take_while
raise ArgumentError, "tried to call lazy take_while without a block" unless block_given?
Lazy.new(self) do |yielder, *values|
throw @@done unless yield(*values)
yielder.yield(*values)
end.__set_inspect :take_while
end
to_enum(method = :each, *args)
click to toggle source
def to_enum(method = :each, *args)
Lazy.new(@@lazy_with_no_block.new(self, method, args))
end
zip(*args)
click to toggle source
Calls superclass method
def zip(*args)
return super if block_given?
arys = args.map{ |arg| Backports.is_array?(arg) }
if arys.all?
Lazy.new(self) do |yielder, *values|
data = yielder.backports_memo ||= {:iter => 0}
values = values.first unless values.size > 1
yielder << arys.map{|ary| ary[data[:iter]]}.unshift(values)
data[:iter] += 1
end
else
args.each do |a|
raise TypeError, "wrong argument type #{a.class} (must respond to :each)" unless a.respond_to? :each
end
Lazy.new(self) do |yielder, *values|
enums = yielder.backports_memo ||= args.map(&:to_enum)
values = values.first unless values.size > 1
others = enums.map do |arg|
begin
arg.next
rescue StopIteration
nil
end
end
yielder << others.unshift(values)
end
end.__set_inspect :zip, args
end