0

空のパラメーターを見るたびに、次のようなメソッドで表示されました。

def method_name(arguments)
  #stuff to be executed
end

そして、メソッドが呼び出されます。今、私はこれに出くわしました:

x = something()

私は何を見ていますか?変数であることは承知していますが、空の部分は何ですか?

4

3 に答える 3

3

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
于 2013-09-16T15:57:03.483 に答える
1

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])
于 2013-09-16T16:59:40.000 に答える