gpt4 book ai didi

ruby - Ruby 如何允许方法参数默认值从早期参数派生?

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:17 25 4
gpt4 key购买 nike

在 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

Is this behaviour only for 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

lambda 斯:

func = lambda do |x, y=x[:a]| 
puts x, y
end

func.call({a: 1, b: 2})

--output:--
{:a=>1, :b=>2}
1

因此参数变量赋值对于方法、过程和 lambda 的工作方式相同。

关于ruby - Ruby 如何允许方法参数默认值从早期参数派生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18667253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com