この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.1 リファレンスマニュアル)
インスタンスメソッド
shift -> object | nil
shift(n) -> Array
- 配列の先頭の要素を取り除いてそれを返す
- 引数を指定した場合、その個数だけ取り除きそれを配列で返す
- nが自身の要素より大きい場合はその要素数の配列を返す
- ドキュメントでは「少ない場合は」って書いてあるけど、意味合い的に間違いのような気がする?
- その場合、自身は空配列となる
- 空配列の場合、nが指定されていない場合はnilを、指定されている場合は空配列を返す
- 覚えておきたい
- 引数に整数以外の(暗黙の型変換が行えない)オブジェクトを指定した場合TypeErrorが、負の数を指定した場合ArgumentErrorが発生する
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.shift => "a" irb(main):003:0> arr => ["b", "c", "d", "e"] irb(main):004:0> arr.shift(2) => ["b", "c"] irb(main):005:0> arr => ["d", "e"] irb(main):006:0> arr.shift(10) => ["d", "e"] irb(main):007:0> arr => []
irb(main):001:0> [].shift => nil irb(main):002:0> [].shift(5) => [] # memo # この挙動の違いは覚えておきたい
irb(main):001:0> [].shift(1.0) => [] irb(main):002:0> [].shift('1') (irb):2:in `shift': no implicit conversion of String into Integer (TypeError) from (irb):2:in `<main>' from /Users/mfham/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `load' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `<main>' irb(main):003:0> [].shift(-1) (irb):3:in `shift': negative array size (ArgumentError) from (irb):3:in `<main>' from /Users/mfham/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `load' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `<main>'
メモ
- 今回から実行環境をRuby3.1.0にします