空のパラメーターを見るたびに、次のようなメソッドで表示されました。
def method_name(arguments)
#stuff to be executed
end
そして、メソッドが呼び出されます。今、私はこれに出くわしました:
x = something()
私は何を見ていますか?変数であることは承知していますが、空の部分は何ですか?
空のパラメーターを見るたびに、次のようなメソッドで表示されました。
def method_name(arguments)
#stuff to be executed
end
そして、メソッドが呼び出されます。今、私はこれに出くわしました:
x = something()
私は何を見ていますか?変数であることは承知していますが、空の部分は何ですか?
variablesomething
と methodがある状況を想像してくださいsomething
。参照するときはいつでもsomething()
、メソッドを参照しています。
def something
"Java"
end
something = "Ruby"
a = something #=> value of a is "Ruby"
a = something() #=> value of a is "Java" # got from method
Ruby メソッドのパラメーターは非常に柔軟です。メソッド定義によれば、呼び出しで指定されたパラメーターは、直接渡すか、存在しない場合はデフォルトにするか、単一の配列パラメーターに圧縮することができます。
この短いプログラムは示しています。パラメータチェックの仕組みは次のとおりです。
呼び出しで指定されたパラメーターは、最初から最後まで、メソッド定義内のデフォルト以外の個々のパラメーターすべてに最初に割り当てられます。
デフォルト以外のすべての仮パラメータに一致する実パラメータが不十分な場合は、 awrong number of arguments (N for M) (ArgumentError)
が発生します。
実パラメータが残っている場合は、最初から最後まですべてのデフォルトパラメータに割り当てられます。
実パラメータがまだ残っている場合、それらは配列にまとめられ、splatパラメータが定義されている場合はそれに割り当てられます。
実パラメータがまだ残っていて、splat パラメータが定義されていない場合は、awrong number of arguments (N for M) (ArgumentError)
が発生します。
このプログラムは、それらの状況のいくつかを示しています。コメント行により、説明されているエラーが発生します。
def method_name(arguments)
puts "method_name(#{arguments})"
end
def something()
puts 'something()'
end
def something_else(param = 99)
puts "something_else(#{param})"
end
def something_more(param = 99, *rest)
puts "something_else(#{param}, #{rest})"
end
#method_name()
method_name(1)
#something(1)
something()
something_else()
something_else(42)
something_more()
something_more(1)
something_more(1, 2)
出力
method_name(1)
something()
something_else(99)
something_else(42)
something_more(99, [])
something_more(1, [])
something_more(1, [2])