Class: Enumerator
- Includes:
- Enumerable
- Defined in:
- opal/opal/corelib/enumerator.rb
Direct Known Subclasses
Defined Under Namespace
Classes: ArithmeticSequence , Generator , Lazy , Yielder
Class Method Summary collapse
Instance Method Summary collapse
- #each(*args, &block) ⇒ Object
- #each_with_index(&block) ⇒ Object
-
#initialize(&block) ⇒ Enumerator
constructor
A new instance of Enumerator.
- #inspect ⇒ Object
- #size ⇒ Object
- #with_index(offset = 0, &block) ⇒ Object
Methods included from Enumerable
#all? , #any? , #chunk , #chunk_while , #collect , #collect_concat , #count , #cycle , #detect , #drop , #drop_while , #each_cons , #each_entry , #each_slice , #each_with_object , #entries , #enumerator_size , #filter_map , #find_all , #find_index , #first , #grep , #grep_v , #group_by , #include? , #inject , #lazy , #max , #max_by , #min , #min_by , #minmax , #minmax_by , #none? , #one? , #partition , #reject , #reverse_each , #slice_after , #slice_before , #slice_when , #sort , #sort_by , #sum , #take , #take_while , #tally , #to_h , #uniq , #zip
Constructor Details
#initialize(&block) ⇒ Enumerator
Returns a new instance of Enumerator.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
# File 'opal/opal/corelib/enumerator.rb', line 23 def initialize(*, &block) if block @object = Generator .new (&block) @method = :each @args = [] @size = `arguments[0] || nil` if @size && !@size.respond_to?(:call) @size = `$coerce_to(#{@size}, #{Integer }, 'to_int')` end else @object = `arguments[0]` @method = `arguments[1] || "each"` @args = `$slice.call(arguments, 2)` @size = nil end end
Class Method Details
.for(object, method = :each, *args, &block) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21
# File 'opal/opal/corelib/enumerator.rb', line 10 def self.for(object, method = :each, *args, &block) %x{ var obj = #{allocate}; obj.object = object; obj.size = block; obj.method = method; obj.args = args; return obj; } end
Instance Method Details
#each(*args, &block) ⇒ Object
41 42 43 44 45 46 47 48 49
# File 'opal/opal/corelib/enumerator.rb', line 41 def each(*args, &block) return self if block.nil? && args.empty? args = @args + args return self.class.new(@object, @method, *args) if block.nil? @object.__send__(@method, *args, &block) end
#each_with_index(&block) ⇒ Object
82 83 84 85 86 87
# File 'opal/opal/corelib/enumerator.rb', line 82 def each_with_index(&block) return enum_for(:each_with_index) { size } unless block_given? super @object end
#inspect ⇒ Object
#size ⇒ Object
51 52 53
# File 'opal/opal/corelib/enumerator.rb', line 51 def size @size.respond_to?(:call) ? @size.call(*@args) : @size end
#with_index(offset = 0, &block) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
# File 'opal/opal/corelib/enumerator.rb', line 55 def with_index(offset = 0, &block) offset = if offset `$coerce_to(offset, #{Integer }, 'to_int')` else 0 end return enum_for(:with_index, offset) { size } unless block %x{ var result, index = offset; self.$each.$$p = function() { var param = #{Opal .destructure (`arguments`)}, value = block(param, index); index++; return value; } return self.$each(); } end