Ruby_Array_53

この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。

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にします