[フレーム]

Class: Enumerator

Inherits:
Object show all
Includes:
Enumerable
Defined in:
opal/opal/corelib/enumerator.rb

Direct Known Subclasses

ArithmeticSequence , Lazy

Defined Under Namespace

Classes: ArithmeticSequence , Generator , Lazy , Yielder

Class Method Summary collapse

Instance Method Summary collapse

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

#inspectObject

89
90
91
92
93
94
95
96
97
# File 'opal/opal/corelib/enumerator.rb', line 89
def inspect
 result = "#<#{self.class}: #{@object.inspect}:#{@method}"
 if @args.any?
 result += "(#{@args.inspect[Range .new (1, -2)]})"
 end
 result + '>'
end

#sizeObject

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

AltStyle によって変換されたページ (->オリジナル) /