10

Camping次のようにスプラットが使用されているコンストラクターを見たとき、コードベースをブラウズしていました。

class Fruit 
  def initialize(*)
  end
end

このサイトとGoogleで「変数名のないsplat」を検索してみましたが、splatがこのような変数名で使用されているという情報以外は何も見つかりませんでし*some_varたが、それなしではありません. 私はreplでこれをいじってみました、そして私は次のようなものを試しました:

class Fruit 
  def initialize(*)
      puts *
  end
end

Fruit.new('boo')

しかし、それはこのエラーに遭遇します:

(eval):363: (eval):363: compile error (SyntaxError)
(eval):360: syntax error, unexpected kEND
(eval):363: syntax error, unexpected $end, expecting kEND

この質問がまだされていない場合、誰かがこの構文が何をするのか説明できますか?

4

2 に答える 2

8

通常、このようなスプラットは、メソッドでは使用されないが、スーパークラスの対応するメソッドによって使用される引数を指定するために使用されます。次に例を示します。

class Child < Parent
  def do_something(*)
    # Do something
    super
  end
end

これは、スーパークラスでこのメソッドを呼び出し、元のメソッドに与えられたすべてのパラメーターを渡すことを意味します。

ソース: Ruby 1.9 のプログラミング (Dave Thomas)

于 2013-08-01T03:03:15.187 に答える