Rubyの仮引数が*だけの意味とは?

投稿者: Anonymous

railsの中身を読んでいました

def sum(*)
  calculate :sum, nil
end

仮引数が * のみです。
何を示していてどういうときに使うのでしょうか?


追記:
cul8erさんの回答によって、一般的に子クラスのinitializeで使うことがわかりました。

何に使うことが多いかというと、多分、基底クラスの#initialzeにsuperで引数渡しをする際に、派生クラス側で親の#initializeの引数数を把握したくない(≒依存したくない)という場合などが考えられます。

railsのsumのケースですとsuperと関係がないと思いますので、できればrailsのsumで使われている用法もお願い致します。

解決

リファレンスマニュアルに説明も用例も載っています。

仮引数の直前に * がある場合には残りの実引数 (後述の post 引数を除く) はみな配列とし てこの引数に格納されます。
可変長引数、rest 引数などと呼ばれる機能です。 このような引数は 1 つしか作れません。

例:

def foo(x, *xs)
  puts "#{x} : #{xs.inspect}"   # Object#inspect は p のような詳細な内部表示
end
foo(1)        #=> 1 : []
foo(1, 2)     #=> 1 : [2]
foo(1, 2, 3)  #=> 1 : [2, 3]

def bar(x, *) # 残りの引数を単に無視したいとき
  puts "#{x}"
end
bar(1)        #=> 1
bar(1, 2)     #=> 1
bar(1, 2, 3)  #=> 1

残りの引数を単に無視したいときと書いてあるとおりでしょう。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *