Class: Range
- Inherits:
-
Object
- Object
- Range
- Includes:
- Enumerable
- Defined in:
- mrblib/range.rb,
mrblib/range.rb,
mrbgems/mruby-range-ext/mrblib/range.rb
Overview
Range is enumerable
ISO 15.2.14.3
Constant Summary
Constants included from Enumerable
Instance Method Summary collapse
-
#each(&block) ⇒ Object
Calls the given block for each element of +self+ and pass the respective element.
-
#first(*args) ⇒ Object
call-seq: rng.first -> obj rng.first(n) -> an_array.
-
#hash ⇒ Object
redefine #hash 15.3.1.3.15.
-
#max(&block) ⇒ Object
-
#min(&block) ⇒ Object
Methods included from Enumerable
__update_hash, #all?, #any?, #chain, #collect, #count, #cycle, #detect, #drop, #drop_while, #each_cons, #each_slice, #each_with_index, #each_with_object, #entries, #filter_map, #find_all, #find_index, #flat_map, #grep, #group_by, #include?, #inject, #lazy, #max_by, #min_by, #minmax, #minmax_by, #none?, #one?, #partition, #reject, #reverse_each, #sort, #sort_by, #take, #take_while, #tally, #to_h, #uniq, #zip
Instance Method Details
#each(&block) ⇒ Object
Calls the given block for each element of +self+ and pass the respective element.
ISO 15.2.14.4.4
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'mrblib/range.rb', line 12 def each(&block) return to_enum :each unless block val = self.first last = self.last if val.kind_of?(Fixnum) && last.kind_of?(Fixnum) # fixnums are special lim = last lim += 1 unless exclude_end? i = val while i < lim block.call(i) i += 1 end return self end if val.kind_of?(String) && last.kind_of?(String) # strings are special if val.respond_to? :upto return val.upto(last, exclude_end?, &block) else str_each = true end end raise TypeError, "can't iterate" unless val.respond_to? :succ return self if (val <=> last) > 0 while (val <=> last) < 0 block.call(val) val = val.succ if str_each break if val.size > last.size end end block.call(val) if !exclude_end? && (val <=> last) == 0 self end |
#first(*args) ⇒ Object
call-seq: rng.first -> obj rng.first(n) -> an_array
Returns the first object in the range, or an array of the first +n+ elements.
(10..20).first #=> 10 (10..20).first(3) #=> [10, 11, 12]
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'mrbgems/mruby-range-ext/mrblib/range.rb', line 13 def first(*args) return self.begin if args.empty? raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 1)" unless args.length == 1 nv = args[0] n = nv.__to_int raise ArgumentError, "negative array size (or size too big)" unless 0 <= n ary = [] each do |i| break if n <= 0 ary.push(i) n -= 1 end ary end |
#hash ⇒ Object
redefine #hash 15.3.1.3.15
54 55 56 57 58 |
# File 'mrblib/range.rb', line 54 def hash h = first.hash ^ last.hash h += 1 if self.exclude_end? h end |
#max(&block) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'mrbgems/mruby-range-ext/mrblib/range.rb', line 29 def max(&block) val = self.first last = self.last return super if block # fast path for numerics if val.kind_of?(Numeric) && last.kind_of?(Numeric) raise TypeError if exclude_end? && !last.kind_of?(Fixnum) return nil if val > last return nil if val == last && exclude_end? max = last max -= 1 if exclude_end? return max end # delegate to Enumerable super end |
#min(&block) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'mrbgems/mruby-range-ext/mrblib/range.rb', line 49 def min(&block) val = self.first last = self.last return super if block # fast path for numerics if val.kind_of?(Numeric) && last.kind_of?(Numeric) return nil if val > last return nil if val == last && exclude_end? min = val return min end # delegate to Enumerable super end |