この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.1 リファレンスマニュアル)
継承
Array < Enumerable < Object < Kernel < BasicObject dynamic include: JSON::Generator::GeneratorMethods::Array (by json)
特異メソッド
self[*item] -> Array
- itemを要素として持つ配列を生成し、返す
irb(main):001:0> arr = Array[1, 2, 3] => [1, 2, 3] irb(main):002:0> arr.class => Array
irb(main):001:0> class SubArray < Array irb(main):002:0> end => nil irb(main):003:0> sub_arr = SubArray[1, 2, 3] => [1, 2, 3] irb(main):004:0> sub_arr.class => SubArray # memo # この特異メソッドは、上記のようにサブクラスのインスタンスを生成しやすくするために用意されているみたいだ。
new(size = 0, val = nil) -> Array
- 長さsizeの配列を生成し、各要素をvalで初期化し、返す
- 全要素が同じオブジェクトvalを参照
irb(main):001:0> Array.new => []
irb(main):001:0> arr = Array.new(3) => [nil, nil, nil] irb(main):002:0> arr.class => Array
irb(main):001:0> Array.new(3, 'foo') => ["foo", "foo", "foo"]
irb(main):001:0> arr = Array.new(3, 'foo') => ["foo", "foo", "foo"] irb(main):002:0> arr[0].capitalize! => "Foo" irb(main):003:0> arr => ["Foo", "Foo", "Foo"]
irb(main):001:0> arr = Array.new(3, 'foo') => ["foo", "foo", "foo"] irb(main):002:0> arr[1] = 'bar' => "bar" irb(main):003:0> arr => ["foo", "bar", "foo"] # memo # よく考えればわかるけど、arr[0]とarr[2]は"bar"にならない。
new(ary) -> Array
- 指定された配列(ary)を複製して返す
- 要素を複製しない浅い複製
irb(main):001:0> Array.new([1,2,3]) => [1, 2, 3]
irb(main):001:0> a = ['a', 'b', 'c'] => ["a", "b", "c"] irb(main):002:0> b = Array.new(a) => ["a", "b", "c"] irb(main):003:0> a[1].capitalize! => "B" irb(main):004:0> a => ["a", "B", "c"] irb(main):005:0> b => ["a", "B", "c"] irb(main):006:0> a[1] = 'z' => "z" irb(main):007:0> a => ["a", "z", "c"] irb(main):008:0> b => ["a", "B", "c"]
new(size) {|index| ... } -> Array
- 長さsizeの配列を生成、要素のインデックスを引数としてブロックを実行、各要素の値をブロックの評価結果に設定し、返す
- ブロックは要素ごとに実行されるので、全要素をあるオブジェクトの複製にすることが可能
irb(main):001:0> Array.new(3){|index| "hoge#{index}"} => ["hoge0", "hoge1", "hoge2"]
irb(main):001:0> arr = Array.new(3){ "foo" } => ["foo", "foo", "foo"] irb(main):002:0> arr[1].capitalize! => "Foo" irb(main):003:0> arr => ["foo", "Foo", "foo"] # memo # arr[0]とarr[2]は"Foo"にならない。
try_convert(obj) -> Array | nil
- to_aryメソッドを用いてobjを配列に変換しようとする
- 変換できないときはnilを返す
- to_aryメソッドって何?後で調べる
- 引数が配列であるかどうか調べるときに使える
irb(main):001:0> Array.try_convert([1]) => [1]
irb(main):001:0> Array.try_convert('1') => nil
irb(main):001:0> class SubArray < Array irb(main):002:0> end => nil irb(main):003:0> sub_arr = SubArray.new => [] irb(main):004:0> sub_arr.class => SubArray irb(main):005:0> puts 'yes' if Array.try_convert(sub_arr) yes => nil
メモ
try_convert
を初めて知ったnew(ary)
はどういうときに活用するのだろう?- ドキュメントで使われている変数名、
arr
じゃなくてary
だ