Skip to content

Instantly share code, notes, and snippets.

@eflukx
Created July 6, 2016 09:58
Show Gist options
  • Save eflukx/7324c37b37f9f54691be0470074edcbf to your computer and use it in GitHub Desktop.
Save eflukx/7324c37b37f9f54691be0470074edcbf to your computer and use it in GitHub Desktop.
Voorbeelde met Ruby blocks en de enumerable mixin
class Teller
include Enumerable
def initialize max = 100
@max = max
@teller = 0
end
def each
loop do
break if @teller >= @max
yield @teller += 1
end
end
end
# Met blocks kun je makkelijk een iterator maken, we definieren hiertoe de each method
teller = Teller.new
teller.each do |c|
puts c
end
# zodra je each geimplementeerd hebt kun je de Enumerable module inmixen, hiermee krijg je
# meer Enumerable functies tot je beschikking zoals inject (a.k.a. reduce)
Teller.new(10).reduce([1]){ |ary, i| ary << i + ary.last }
# filter en selct
Teller.new(10).select{ |i| i < 3 or i > 8}
# of de to_a methode
Teller.new(10).to_a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment