Skip to content
instance method

String#upto

(::string other_string, ?::boolish exclusive) -> ::Enumerator[::String, self]
(::string other_string, ?::boolish exclusive) { (::String s) -> void } -> self
upto(other_string, exclusive = false) {|string| ... } → self
upto(other_string, exclusive = false) → new_enumerator

With a block given, calls the block with each String value returned by successive calls to String#succ; the first value is self, the next is self.succ, and so on; the sequence terminates when value other_string is reached; returns self:

Example
a = []
'a'.upto('f') {|c| a.push(c) }
a # => ["a", "b", "c", "d", "e", "f"]

a = []
'Ж'.upto('П') {|c| a.push(c) }
a # => ["Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П"]

a = []
'よ'.upto('ろ') {|c| a.push(c) }
a # => ["よ", "ら", "り", "る", "れ", "ろ"]

a = []
'a8'.upto('b6') {|c| a.push(c) }
a # => ["a8", "a9", "b0", "b1", "b2", "b3", "b4", "b5", "b6"]

If argument exclusive is given as a truthy object, the last value is omitted:

Example
a = []
'a'.upto('f', true) {|c| a.push(c) }
a # => ["a", "b", "c", "d", "e"]

If other_string would not be reached, does not call the block:

Example
'25'.upto('5') {|s| fail s }
'aa'.upto('a') {|s| fail s }

With no block given, returns a new Enumerator:

Example
'a8'.upto('b6') # => #<Enumerator: "a8":upto("b6")>

Related: see Iterating.

See also #upcase! #valid_encoding? #upcase also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0