範囲演算子では文字通り範囲を意味するオブジェクトを簡単に作ることができます。範囲演算子は「..」「…」の2種類があります。
1 2 3 4 |
p 1..5 p 1...5 p "a".."e" p "a"..."e" |
意味的には1行目は1~5ということになり、2行目では5を除いた(1つ前の)1~4という意味になります。アルファベットでも同じような意味となります。
to_aメソッド
範囲オブジェクトにto_aメソッドを使うと配列オブジェクトを作ることができるので実際にスクリプトを実行して範囲の確認をしてみましょう。
1 2 3 4 |
p (1..5).to_a p (1...5).to_a p ("a".."e").to_a p ("a"..."e").to_a |
[1, 2, 3, 4, 5] [1, 2, 3, 4] ["a", "b", "c", "d", "e"] ["a", "b", "c", "d"]
日本語でも範囲オブジェクトは作れるの?
ちなみにですが、日本語でも範囲オブジェクトは作れます。
1 |
puts ("ぁ".."お").to_a |
ぁ あ ぃ い ぅ う ぇ え ぉ お
Rangeクラスのnew
Rangeクラスのクラスメソッドである「new」メソッドを使っても同じように範囲オブジェクトを作成することができます。
1 2 3 4 5 6 7 8 9 |
# 1..5 と同じ r = Range.new(1, 5) p r p r.to_a # 1...5 と同じ r = Range.new(1, 5, true) p r p r.to_a |
1..5 [1, 2, 3, 4, 5] 1...5 [1, 2, 3, 4]
ちなみに範囲オブジェクトでは「succ」メソッドを使って範囲を表現しているらしいです。
参考:succ, succ! (String)
コメントを残す