常識すぎるのか、ググってもなかなか出てこなかったのでメモ
可変長引数とは
rubyでは仮引数名の頭に「*」をつけると可変長で受け取ることができる。
def myfunc(*args) p args end myfunc(1, "hello", true) # => [1, "hello", true]
問題点
が、ここで配列をそのまま渡したらなんとかなるんじゃね?wとか思ってやってみたが、配列を1変数として受け取ってしまう(よく考えると当然である
myfunc([1, "hello", true]) # => [[1, "hello", true]]
解決策
渡す側にも「*」つけたらいけた
myfunc(*[1, "hello", true]) # => [1, "hello", true]
発端
そもそもこれを調べる理由として、RailsのActiverecordで
Post.all.pluck(:id,;title)
のようにするとそのカラムのデータだけ入った配列を取得できるので便利だったのだが、渡すカラム一覧をPost.column_names
のように配列で渡したかったって話
ソースコード見てもdef pluck(*keys) end
だったのでこれでいけた