要約
範囲オブジェクトのクラス。範囲オブジェクトは範囲演算子 .. または ... によって生成されます。.. 演算子によって生成された範囲オブジェクトは終端を含み、... 演算子によって生成された範囲オブジェクトは終端を含みません。
例
for i in 1..5 # 処理 end
これは 1 から 5 までの範囲オブジェクトを生成して、それぞれの値に対して繰り返すと言う意味です。
範囲演算子のオペランドは互いに <=> で比較できる必要があります。さらに Range#each を実行するためには succ メソッドを実行できるものでなければいけません。
破壊的な変更
Ruby の Range クラスは immutable です。つまり、オブジェクト自体を破壊的に変更することはできません。ですので、一度生成された Range のオブジェクトの指し示す範囲は決して変更することはできません。
range = 1..10 range.first #=> 1 range.first = 1 #=> NoMethodError
目次
- 特異メソッド
- インスタンスメソッド
- 追加されるメソッド
継承しているメソッド
- Enumerableから継承しているメソッド
-
- all?
- any?
- chunk
- collect
- collect_concat
- count
- cycle
- detect
- drop
- drop_while
- each_cons
- each_entry
- each_slice
- each_with_index
- each_with_object
- entries
- find
- find_all
- find_index
- flat_map
- grep
- group_by
- inject
- map
- max_by
- min_by
- minmax
- minmax_by
- none?
- one?
- partition
- reduce
- reject
- reverse_each
- select
- slice_before
- sort
- sort_by
- take
- take_while
- to_a
- zip
特異メソッド
new(first, last, exclude_end = false) -> Range[permalink][rdoc]-
first から last までの範囲オブジェクトを生成して返します。
exclude_end が真ならば終端を含まない範囲オブジェクトを生成します。exclude_end 省略時には終端を含みます。
- [PARAM] first:
- 最初のオブジェクト
- [PARAM] last:
- 最後のオブジェクト
- [PARAM] exclude_end:
- 真をセットした場合終端を含まない範囲オブジェクトを生成します
- [EXCEPTION] ArgumentError:
- first <=> last が nil の場合に発生します
インスタンスメソッド
self == other -> bool[permalink][rdoc]-
指定された other が Range クラスのインスタンスであり、始点と終点が == メソッドで比較して等しく、Range#exclude_end? が同じ場合に true を返します。そうでない場合に false を返します。
- [PARAM] other:
- 自身と比較したいオブジェクトを指定します。
p (1..2) == (1..2) #=> true p (1..2) == (1...2) #=> false p (1..2) == Range.new(1.0, 2.0) #=> true
self === obj -> bool[permalink][rdoc]include?(obj) -> boolmember?(obj) -> bool-
obj が範囲内に含まれている時に真を返します。
Range#=== は主に case 式での比較に用いられます。
<=> メソッドによる演算により範囲内かどうかを判定するには Range#cover? を使用してください。
- [PARAM] obj:
- 比較対象のオブジェクトを指定します。
p (0.1 .. 0.2).member?(0.15) # => true # 文字列の場合、include? は辞書順の比較になる p ("a" .. "c").include?("ba") # => false p ("a" .. "c").member?("ba") # => false[SEE_ALSO] 制御構造/case
[SEE_ALSO] Range#cover?
begin -> object[permalink][rdoc]first -> object-
始端の要素を返します。範囲オブジェクトが始端を含むかどうかは関係ありません。
p (1..5).begin # => 1 p (1..0).begin # => 1
first(n) -> [object][permalink][rdoc]-
最初の n 要素を返します。範囲内に要素が含まれない場合は空の配列を返します。
- [PARAM] n:
- 取得する要素数を整数で指定します。整数以外のオブジェクトを指定した場合は to_int メソッドによる暗黙の型変換を試みます。
- [EXCEPTION] TypeError:
- 引数に整数以外の(暗黙の型変換が行えない)オブジェクトを指定した場合に発生します。
- [EXCEPTION] ArgumentError:
- n に負の数を指定した場合に発生します。
[SEE_ALSO] [ruby-core:12697]
cover?(obj) -> bool[permalink][rdoc]-
obj が範囲内に含まれている時に真を返します。
Range#include? と異なり <=> メソッドによる演算により範囲内かどうかを判定します。 Range#include? は原則として離散値を扱い、 Range#cover? は連続値を扱います。(数値については、例外として Range#include? も連続的に扱います。)
- [PARAM] obj:
- 比較対象のオブジェクトを指定します。
# 数値は連続的に扱われているため、 include? / cover? が同じ結果を返す (1.1..2.3).include?(1.0) # => false (1.1..2.3).include?(1.1) # => true (1.1..2.3).include?(1.555) # => true (1.1..2.3).cover?(1.0) # => false (1.1..2.3).cover?(1.1) # => true (1.1..2.3).cover?(1.555) # => true # String の例 ('b'..'d').include?('d') # => true ('b'..'d').include?('ba') # => false ('b'..'d').cover?('d') # => true ('b'..'d').cover?('ba') # => true # Date, DateTime の例 (Date.new(2014,1,3)..Date.new(2014,1,5)).include?(Date.new(2014,1,5)) # => true (Time.new(2014,1,3)..Time.new(2014,1,5)).include?(Time.new(2014,1,4,10,10,10)) # => "can't iterate from Time" (Date.new(2014,1,3)..Date.new(2014,1,5)).cover?(Date.new(2014,1,5)) # => true (Time.new(2014,1,3)..Time.new(2014,1,5)).cover?(Time.new(2014,1,4,10,10,10)) # => true[SEE_ALSO] Range#include?
each {|item| ... } -> self[permalink][rdoc]each -> Enumerator-
範囲内の要素に対して繰り返します。
Range#each は各要素の succ メソッドを使用してイテレーションするようになりました。
- [EXCEPTION] TypeError:
- succ メソッドを持たないクラスの範囲オブジェクトに対してこのメソッドを呼んだ場合に発生します。
end -> object[permalink][rdoc]last -> object-
終端の要素を返します。範囲オブジェクトが終端を含むかどうかは関係ありません。
(10..20).last # => 20 (10...20).last # => 20
last(n) -> [object][permalink][rdoc]-
最後の n 要素を返します。範囲内に要素が含まれない場合は空の配列を返します。
- [PARAM] n:
- 取得する要素数を整数で指定します。整数以外のオブジェクトを指定した場合は to_int メソッドによる暗黙の型変換を試みます。
- [EXCEPTION] TypeError:
- 引数に整数以外の(暗黙の型変換が行えない)オブジェクトを指定した場合に発生します。
- [EXCEPTION] ArgumentError:
- n に負の数を指定した場合に発生します。
[注意] 引数を省略して実行した場合は、終端を含むかどうか (Range#exclude_end? の戻り値)に関わらず終端の要素を返す事に注意してください。
(10..20).last(3) # => [18, 19, 20] (10...20).last(3) # => [17, 18, 19]
eql?(other) -> bool[permalink][rdoc]-
指定された other が Range クラスのインスタンスであり、始点と終点が eql? メソッドで比較して等しく、Range#exclude_end? が同じ場合に true を返します。そうでない場合に false を返します。
- [PARAM] other:
- 自身と比較したいオブジェクトを指定します。
p (1..2).eql?(1..2) #=> true p (1..2).eql?(1...2) #=> false p (1..2).eql?(Range.new(1.0, 2.0)) #=> false
exclude_end? -> bool[permalink][rdoc]-
範囲オブジェクトが終端を含まないとき真を返します。
hash -> Integer[permalink][rdoc]-
始点と終点のハッシュ値と Range#exclude_end? の値からハッシュ値を計算して整数として返します。
p (1..2).hash #=> 5646 p (1...2).hash #=> 16782863
inspect -> String[permalink][rdoc]-
self を文字列に変換します(始点と終点のオブジェクトは #inspect メソッドで文字列に変換されます)。
[SEE_ALSO] Range#to_s
max -> object | nil[permalink][rdoc]-
範囲内の最大の値を返します。
該当する要素が存在しなければ nil を返します。
max {|a, b| ... } -> object | nil[permalink][rdoc]-
ブロックの評価結果で範囲内の各要素の大小判定を行い、最大の要素を返します。範囲内に要素が存在しなければ nil を返します。
ブロックの値は、a > b のとき正、 a == b のとき 0、a < b のとき負の整数を、期待しています。
- [EXCEPTION] TypeError:
- ブロックが整数以外を返したときに発生します。
[SEE_ALSO] Range#last, Enumerable#max
min -> object | nil[permalink][rdoc]-
範囲内の最小の値を返します。
該当する要素が存在しなければ nil を返します。
min {|a, b| ... } -> object | nil[permalink][rdoc]-
ブロックの評価結果で範囲内の各要素の大小判定を行い、最小の要素を返します。範囲内に要素が存在しなければ nil を返します。
ブロックの値は、a > b のとき正、a == b のとき 0、 a < b のとき負の整数を、期待しています。
- [EXCEPTION] TypeError:
- ブロックが整数以外を返したときに発生します。
[SEE_ALSO] Range#first, Enumerable#min
step(s = 1) {|item| ... } -> self[permalink][rdoc]step(s = 1) -> Enumerator-
範囲内の要素を s おきに繰り返します。
- [PARAM] s:
- 正の整数を指定します。
- [EXCEPTION] ArgumentError:
- s に 0 または負の数を指定した場合に発生します
("a" .. "f").step(2) {|v| p v} # => "a" "c" "e" to_s -> String[permalink][rdoc]-
self を文字列に変換します(始点と終点のオブジェクトは #to_s メソッドで文字列に変換されます)。
[SEE_ALSO] Range#inspect
追加されるメソッド
json_create(hash) -> Range[permalink][rdoc] [added by json/add/core]-
JSON のオブジェクトから Ruby のオブジェクトを生成して返します。
- [PARAM] hash:
- 適切なキーを持つハッシュを指定します。
taguri -> String[permalink][rdoc] [added by syck/rubytypes]-
自身のタグ URI を返します。
taguri=(val)[permalink][rdoc] [added by syck/rubytypes]-
自身のタグ URI を val に設定します。
- [PARAM] val:
- タグ URI を文字列で指定します。
to_json(*args) -> String[permalink][rdoc] [added by json/add/core]-
自身を JSON 形式の文字列に変換して返します。
内部的にはハッシュにデータをセットしてから Hash#to_json を呼び出しています。
- [PARAM] args:
- 引数はそのまま Hash#to_json に渡されます。
[SEE_ALSO] Hash#to_json
to_yaml(opts = {}) -> String[permalink][rdoc] [added by syck/rubytypes]-
自身を YAML ドキュメントに変換します。
- [PARAM] opts:
- YAML ドキュメント出力の際のオプションを指定します。オプションの詳細は Syck::Emitter#reset を参照してください。
print (1..10).to_yaml # => --- !ruby/range begin: 1 end: 10 excl: false
yaml_new(klass, tag, val)[permalink][rdoc] [added by syck/rubytypes]-
ライブラリ内部で使用します。
yaml_tag_subclasses? -> true[permalink][rdoc] [added by syck/rubytypes]-
常に true を返します。
ライブラリ内部で使用します。