コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rubyには配列を作る方法としてKernel付けのArrayというメソッドが存在する

あー、そういう原理だったのね…というメモ

環境

$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

よくある実例

代表的な使い方例

a = "Yeah!"
# => "Yeah!"
[a]
# => ["Yeah!"]
Array(a)
# => ["Yeah!"]
Array(["hoga","huge"])
# => ["hoga", "huge"]

間違いやすい例

a = nil
# => nil
[a]
# => [nil]

# nilを指定するとnilが添字0に入るわけではなく空になる
Array(a)
# => []
# 配列で囲まないと引数の関係でエラー
Array("hoga","huge")
ArgumentError: wrong number of arguments (given 2, expected 1)
    from (irb):10:in `Array'
  from (irb):10
  from /usr/bin/irb:11:in `<main>'

実態について

Arrayクラスのインスタンスメソッド…とかではなくKernelのArrayメソッドを呼んでおり、Arrayメソッドは

引数を配列(Array)に変換した結果を返します。 - module Kernel (Ruby 2.6.0)

とあるように引数で挙動が変わるメソッド。とてつもなく紛らわしい…。

参考