每次我看到空参数时,它都会出现在这样的方法中:
def method_name(arguments)
#stuff to be executed
end
然后调用一个方法。现在我遇到了这个:
x = something()
我在看什么?我知道它是一个变量,但空白部分是什么?
每次我看到空参数时,它都会出现在这样的方法中:
def method_name(arguments)
#stuff to be executed
end
然后调用一个方法。现在我遇到了这个:
x = something()
我在看什么?我知道它是一个变量,但空白部分是什么?
想象一下你有一个变量something
和一个方法的情况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 方法参数非常灵活。根据方法定义,调用中给出的参数可以直接传递,如果不存在则默认,或者压缩为单个 Array 参数。
这个简短的程序演示。参数检查的工作方式是
调用中提供的参数首先分配给方法定义中的所有单个非默认参数,从第一个到最后一个。
如果实际参数不足以匹配所有非默认形式参数,wrong number of arguments (N for M) (ArgumentError)
则引发 a。
如果任何实际参数仍然存在,那么它们将被分配给所有默认参数,从第一个到最后一个。
如果任何实际参数仍然存在,那么它们将被捆绑到一个数组中并分配给一个splat参数(如果已定义)。
如果任何实际参数仍然存在,并且没有定义 splat 参数,wrong number of arguments (N for M) (ArgumentError)
则引发 a。
该程序演示了其中一些情况。注释行会引发所描述的错误。
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])
在 ruby 中,括号是可选的,因此在您的示例中,调用method_name
等效于调用method_name()
,但是您的方法需要一个参数。也许这会更好地说明它:
def method_name(arguments={})
#do stuff
end
该方法有一个可选的散列参数。您可以使用以下任何一种调用此方法:method_name
、method_name()
或method_name(argument1: "something")