18776


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

[code]

    def sum(*)
      calculate :sum, nil
    end
    
[/code]

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

* * *

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

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

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


CC BY-SA 3.0
2015-11-13T02:14:01.250
18770
2015-11-13T03:41:55.067
2015-11-13T03:33:46.967
9008
9008
question
ruby-on-rails ruby
Rubyの仮引数が*だけの意味とは？


これは確か`splat`演算子と呼ばれるものです。

[code]

    def abc(*arg)
      arg.each{|n| p n}
    end
    
    abc(1,2,3)  #=> 1 2 3 が出力
    
[/code]

このように仮引数名をつけても使えますが、実は省略可能です。  
何に使うことが多いかというと、多分、基底クラスの`#initialze`に`super`で引数渡しをする際に、派生クラス側で親の`#initialize`の引数数を把握したくない(≒依存したくない)という場合などが考えられます。

例を挙げているページがあったのでご参考まで：[ここまで出来る！RubyのSplat
Operatorまとめ](http://alpaca.tc/blog/ruby/how-to-use-star.html)


CC BY-SA 3.0
2015-11-13T03:20:47.007
18775
2015-11-13T03:20:47.007
9403
18770
answer


[リファレンスマニュアル](http://docs.ruby-
lang.org/ja/2.1.0/doc/spec=2fdef.html#method)に説明も用例も載っています。

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

>     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
>  
[/code]

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


CC BY-SA 3.0
2015-11-13T03:41:55.067
18776
2015-11-13T03:41:55.067
5793
18770
answer