在 Ruby 中,列表中首先传递的参数可用于为后面的参数定义默认值。
class Buddy
def test opts, spec = opts[:red]
puts spec
end
end
n = Buddy.new
n.test( {:red => 3} )
这是什么法宝?
所有参数都是串行加载的吗?这种行为是否仅适用于proc
,但不是lambda
?
在 Ruby 中,列表中首先传递的参数可用于为后面的参数定义默认值。
class Buddy
def test opts, spec = opts[:red]
puts spec
end
end
n = Buddy.new
n.test( {:red => 3} )
这是什么法宝?
所有参数都是串行加载的吗?这种行为是否仅适用于proc
,但不是lambda
?
方法调用导致参数分配给参数变量:
do_stuff(10, 20) #method call
def do_stuff( x, y ) #method definition
resulting assignments: x = 10, y = 20
参数变量是局部变量。将值分配给局部变量后,可以访问局部变量。参数变量赋值似乎与写作没有什么不同:
x = {a: 1, b: 2}
y = x[:a]
puts x, y
--output:--
{:a=>1, :b=>2}
1
这种行为是否仅适用于 proc
您的示例中哪里有 proc?任何状况之下,
func = Proc.new do |x, y=x[:a]|
puts x, y
end
func.call({a: 1, b: 2})
--output:--
{:a=>1, :b=>2}
1
拉姆达斯:
func = lambda do |x, y=x[:a]|
puts x, y
end
func.call({a: 1, b: 2})
--output:--
{:a=>1, :b=>2}
1
因此,参数变量赋值对方法、过程和 lambda 的工作方式相同。