Class: Range
Overview
A Range
represents an interval – a set of values with a start and an end. Ranges may be constructed using the s..e
and s...e
literals, or with Range::new
. Ranges constructed using ..
run from the start to the end inclusively. Those created using ...
exclude the end value. When used as an iterator, ranges return each value in the sequence.
(-1..-5).to_a #=> []
(-5..-1).to_a #=> [-5, -4, -3, -2, -1]
('a'..'e').to_a #=> ["a", "b", "c", "d", "e"]
('a'...'e').to_a #=> ["a", "b", "c", "d"]
Ranges can be constructed using objects of any type, as long as the <=>
comparison operator and the succ
method (to return the next object in sequence) are defined.
class XChain
attr :length
def initialize(n)
@length = n
end
def succ
one_more = @length + 1
XChain.new(one_more)
end
def <=>(other)
@length <=> other.length
end
def inspect
'x' * @length
end
end
r = XChain.new(2)..XChain.new(5) #=> xx..xxxxx
r.to_a #=> [xx, xxx, xxxx, xxxxx]
r.member? XChain.new(4) #=> true
Instance Method Summary collapse
-
#==(object) ⇒ Object
call-seq: rng == obj -> true or false.
-
#===(obj) ⇒ Object
call-seq: rng === obj -> true or false rng.include?(obj) -> true or false rng.member?(obj) -> true or false.
-
#begin ⇒ Object
call-seq: rng.begin -> obj rng.first -> obj.
-
#each ⇒ Object
FIX: Incomplete.
-
#end ⇒ Object
call-seq: rng.end -> obj rng.last -> obj.
-
#eql?(object) ⇒ Boolean
call-seq: rng.eql?(obj) -> true or false.
-
#exclude_end? ⇒ Boolean
call-seq: rng.exclude_end? -> true or false.
-
#first ⇒ Object
call-seq: rng.begin -> obj rng.first -> obj.
-
#hash ⇒ Object
FIX: Incomplete.
-
#include?(obj) ⇒ Boolean
call-seq: rng === obj -> true or false rng.include?(obj) -> true or false rng.member?(obj) -> true or false.
-
#initialize(start, finish, exclusive = false) ⇒ Range
constructor
call-seq: Range.new(start, end, exclusive=false) -> range.
-
#inspect ⇒ Object
call-seq: rng.inspect -> string.
-
#last ⇒ Object
call-seq: rng.end -> obj rng.last -> obj.
-
#member?(obj) ⇒ Boolean
call-seq: rng === obj -> true or false rng.include?(obj) -> true or false rng.member?(obj) -> true or false.
-
#step ⇒ Object
FIX: Incomplete.
-
#to_s ⇒ Object
call-seq: rng.to_s -> string.
Constructor Details
#initialize(start, finish, exclusive = false) ⇒ Range
call-seq:
Range.new(start, end, exclusive=false) -> range
Constructs a range using the given start and end. If exclusive is omitted or is false
, the range will include the end object; otherwise, it will be excluded.
4843 4844 4845 4846 4847 |
# File 'lib/source/ruby.rb', line 4843 def initialize(start,finish,exclusive=false) `this.__start__=start` `this.__end__=finish` `this.__exclusive__=exclusive` end |
Instance Method Details
#==(object) ⇒ Object
4860 4861 4862 4863 |
# File 'lib/source/ruby.rb', line 4860 def ==(object) `if(object.constructor!==c$Range){return false;}` `this.__start__.m$_eql2(object.__start__)&&this.__end__.m$_eql2(object.__end__)&&this.__exclusive__==object.__exclusive__` end |
#===(obj) ⇒ Object
call-seq:
rng === obj -> true or false
rng.include?(obj) -> true or false
rng.member?(obj) -> true or false
Returns true
if obj is an element of rng, false
otherwise. Conveniently, ===
is the comparison operator used by case
statements.
case 79
when 1..50 : puts "low"
when 51..75 : puts "medium"
when 76..100 : puts "high"
end
produces:
high
4884 4885 4886 4887 |
# File 'lib/source/ruby.rb', line 4884 def ===(obj) `var s=#{obj <=> `this.__start__`},e=#{obj <=> `this.__end__`}` `s==0||s==1?(this.__exclusive__?e==-1:e==-1||e==0):false` end |
#begin ⇒ Object
call-seq:
rng.begin -> obj
rng.first -> obj
Returns the first object in rng.
(1..10).begin #=> 1
4897 4898 4899 |
# File 'lib/source/ruby.rb', line 4897 def begin `this.__start__` end |
#each ⇒ Object
FIX: Incomplete
4902 4903 4904 4905 4906 |
# File 'lib/source/ruby.rb', line 4902 def each `var start=this.__start__,end=this.__end__` `if(typeof(start)=='number'&&typeof(end)=='number'){if(!this.__exclusive__){end++;};for(var i=start;i<end;i++){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};};}` return self end |
#end ⇒ Object
call-seq:
rng.end -> obj
rng.last -> obj
Returns the object that defines the end of rng.
(1..10).end #=> 10
(1...10).end #=> 10
4917 4918 4919 |
# File 'lib/source/ruby.rb', line 4917 def end() `this.__end__` end |
#eql?(object) ⇒ Boolean
4941 4942 4943 4944 |
# File 'lib/source/ruby.rb', line 4941 def eql?(object) `if(object.constructor!==c$Range){return false;}` `this.__start__.m$eql_bool(object.__start__)&&this.__end__.m$eql_bool(object.__end__)&&this.__exclusive__==object.__exclusive__` end |
#exclude_end? ⇒ Boolean
call-seq:
rng.exclude_end? -> true or false
Returns true
if rng excludes its end value.
4926 4927 4928 |
# File 'lib/source/ruby.rb', line 4926 def exclude_end? `this.__exclusive__` end |
#first ⇒ Object
call-seq:
rng.begin -> obj
rng.first -> obj
Returns the first object in rng.
(1..10).first #=> 1
4954 4955 4956 |
# File 'lib/source/ruby.rb', line 4954 def first `this.__start__` end |
#hash ⇒ Object
FIX: Incomplete
4959 4960 |
# File 'lib/source/ruby.rb', line 4959 def hash # :nodoc: end |
#include?(obj) ⇒ Boolean
call-seq:
rng === obj -> true or false
rng.include?(obj) -> true or false
rng.member?(obj) -> true or false
Returns true
if obj is an element of rng, false
otherwise.
(1..10).include?(10) #=> true
(1...10).include?(10) #=> false
4972 4973 4974 4975 |
# File 'lib/source/ruby.rb', line 4972 def include?(obj) `var s=#{obj <=> `this.__start__`},e=#{obj <=> `this.__end__`}` `s==0||s==1?(this.__exclusive__?e==-1:e==-1||e==0):false` end |
#inspect ⇒ Object
call-seq:
rng.inspect -> string
Converts rng to a printable form (using inspect
to convert the start and end objects).
4983 4984 4985 |
# File 'lib/source/ruby.rb', line 4983 def inspect `$q(''+this.__start__.m$inspect()+(this.__exclusive__?'...':'..')+this.__end__.m$inspect())` end |
#last ⇒ Object
call-seq:
rng.end -> obj
rng.last -> obj
Returns the object that defines the end of rng.
(1..10).last #=> 10
(1...10).last #=> 10
4996 4997 4998 |
# File 'lib/source/ruby.rb', line 4996 def last `this.__end__` end |
#member?(obj) ⇒ Boolean
call-seq:
rng === obj -> true or false
rng.include?(obj) -> true or false
rng.member?(obj) -> true or false
Returns true
if obj is an element of rng, false
otherwise.
(1..10).member?(10) #=> true
(1...10).member?(10) #=> false
5010 5011 5012 5013 |
# File 'lib/source/ruby.rb', line 5010 def member?(obj) `var s=#{obj <=> `this.__start__`},e=#{obj <=> `this.__end__`}` `s==0||s==1?(this.__exclusive__?e==-1:e==-1||e==0):false` end |
#to_s ⇒ Object
call-seq:
rng.to_s -> string
Converts rng to a printable form.
5024 5025 5026 |
# File 'lib/source/ruby.rb', line 5024 def to_s `$q(''+this.__start__+(this.__exclusive__?'...':'..')+this.__end__)` end |