Files
mruby-mruby/mrblib/range.rb
T
Yukihiro "Matz" Matsumoto ec1f9860b1 mrblib: add parentheses to method calls with used return values
added parentheses to all `to_enum` and `super` calls where the return
value is used (returned, assigned, or passed to another method). this
makes the code style consistent with the guideline that method calls
should use parentheses when their return values are consumed.

changes:
- return to_enum :symbol -> return to_enum(:symbol)
- return to_enum :symbol, arg -> return to_enum(:symbol, arg)
- super message, name -> super(message, name)

affected files: 10error.rb, array.rb, enum.rb, hash.rb, kernel.rb,
numeric.rb, range.rb

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-11 18:09:06 +09:00

98 lines
1.9 KiB
Ruby

##
# Range
#
# ISO 15.2.14
class Range
##
# Range is enumerable
#
# ISO 15.2.14.3
include Enumerable
##
# Calls the given block for each element of `self`
# and pass the respective element.
#
# ISO 15.2.14.4.4
def each(&block)
return to_enum(:each) unless block
val = self.begin
last = self.end
if val.kind_of?(Integer) && last.nil?
i = val
while true
block.call(i)
i += 1
end
return self
end
if val.kind_of?(String) && last.nil?
if val.respond_to? :__upto_endless
return val.__upto_endless(&block)
else
str_each = true
end
end
if val.kind_of?(Integer) && last.kind_of?(Integer) # integers 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
# redefine #hash 15.3.1.3.15
def hash
h = first.hash ^ last.hash
h += 1 if self.exclude_end?
h
end
##
# call-seq:
# rng.to_a -> array
# rng.entries -> array
#
# Returns an array containing the items in the range.
#
# (1..7).to_a #=> [1, 2, 3, 4, 5, 6, 7]
# (1..).to_a #=> RangeError: cannot convert endless range to an array
def to_a
a = __num_to_a
return a if a
super
end
alias entries to_a
end