2015年8月20日木曜日

Rubyの ... 演算子

10年以上Rubyを使っていて、今更ながら ... 演算子を知った。

.. 演算子と同様にRangeオブジェクトを返すのだが、...で生成したRangeオブジェクトは範囲の末尾を含まない。Numeric a, bに対するa..bはa以上b以下を意味するのに対し、a...bはa以上b未満を意味する。手っ取り早く実例。

irb> (0..3).last
=> 3
irb> (0...3).last
=> 3
irb> (0..3).exclude_end?
=> false
irb> (0...3).exclude_end?
=> true
irb> (0..3).include?(3)
=> true
irb> (0...3).include?(3)
=> false
irb> (0..3).each {|i| p i}
0
1
2
3
=> 0..3
irb> (0...3).each {|i| p i}
0
1
2
=> 0...3
irb> (0..3) == (0...3)
=> false
irb> (0..2) == (0...3)
=> false

単なるループのためにRangeオブジェクトを作るケースで、末尾を含みたくないがためにa..(b-1)のようにしていたところを、a...bと書けるわけだ。

0 件のコメント:

コメントを投稿