Ruby 1.9.2 リファレンスマニュアル > spec/call
メソッド呼び出し
メソッド呼び出し
例:
foo.bar() foo.bar bar() print "hello world\n" print Class.new Class::new
文法:
[式 `.'] 識別子 [`(' 式 ... [`*' [式]],[`&' 式] `)'] [式 `::'] 識別子 [`(' 式 ... [`*' [式]],[`&' 式] `)']
メソッド呼び出し式はレシーバ(`.' の左側の式の値)のメソッドを呼び 出します。レシーバが指定されない時は self のメソッドを呼び出しま す。
`.' と `::' とはほぼ同じ意味です。但し、定数を表す場合は、 `::' を使わなければいけません(例: Math::PI)。逆に、
Klass::Foo
とした場合、常に定数と見なされるという制限があります。 `::' を、クラスメソッド呼び出しに使うという流儀がありますが、 この点は要注意です。大文字で始まるメソッド名を使用する場合は
Klass.Foo
と `.' を使うか、
Klass::Foo()
と括弧でメソッド呼び出しであることを明示する必要があります。
メソッド名には通常の識別子の他、識別子に ? または ! の続い たものが許されます。慣習として、述語(真偽値を返すメソッド)には ? を、同名の(! の無い)メソッドに比べてより破壊的な作用をもつメソッ ド(例: tr と tr!)には ! をつけるようになっています。
最後の引数の直前に * がついている場合、その引数の値が展開されて 渡されます。展開はメソッド to_a を経由して行なわれます。つまり:
foo(1,*[2,3,4]) foo(1,*[])
は、それぞれ
foo(1,2,3,4) foo(1)
と同じです。
最後の引数の直前に & がついている場合、その引数で指定した手続き オブジェクト(Proc)やメソッドオブジェクト(Method)がブロック としてメソッドに渡されます。詳細は block を参照してください。
メソッド呼び出しの際、private なメソッドは関数形式(レシーバを省 略した形式)でしか呼び出すことができません。また protected なメソッ ドはそのメソッドを持つオブジェクトのメソッド定義式内でなければ呼び出せ ません。クラスとメソッドの定義/呼び出し制限 を参照して下さい。
super
例:
super super(1,2,3)
文法:
super super(式, ... )
super は現在のメソッドがオーバーライドしているメソッドを呼び出し ます。括弧と引数が省略された場合には現在のメソッドの引数がそのまま引き 渡されます。引数を渡さずにオーバーライドしたメソッドを呼び出すには super() と括弧を明示します。
例:
class Foo def foo(arg=nil) p arg end end class Bar < Foo def foo(arg) super(5) # 5 を引数にして呼び出す super(arg) # 5 を引数にして呼び出す super # 5 を引数にして呼び出す super(arg) の略記法 arg = 1 super # 1 を引数にして呼び出す super(arg) の略記法 super() # 引数なしで呼び出す end end Bar.new.foo 5