gpt4 book ai didi

ruby - 在 Ruby 中收集关键字参数

转载 作者:行者123 更新时间:2023-12-02 20:19:51 25 4
gpt4 key购买 nike

只是想了解如何在 Ruby 中收集参数,我想出了以下代码片段,在某些情况下,它似乎无法在 **kargs 中收集关键字参数案例:

def foo(i, j= 9, *args, k: 11, **kargs)
puts "args: #{args}; kargs: #{kargs}"
end

foo(a: 7, b: 8)
# output: args: []; kargs: {}
foo(9, a: 7, b: 8)
# output: args: []; kargs: {:a=>7, :b=>8}
foo(9, 10, 13, a: 7, b: 8)
# output: args: [13]; kargs: {:a=>7, :b=>8}

我想知道为什么它在第一次调用 foo 时不收集 kargs,而在第二次调用时收集。

最佳答案

这是因为第一个参数i是必需参数(无默认值),因此,传递给该方法的第一个值(在第一个示例中,这是哈希{ a: 7, b: 8}) 被存储到其中。

然后,由于其他所有内容都是可选的,因此根据情况填写剩余值(如果有,在本示例中没有)。 IE 中,第二个参数将转到 j,除非它是命名参数,否则它将转到 kargs(或 k)。第三个参数以及任何剩余的参数(直到第一个关键字参数)都进入 args,然后任何关键字参数都进入 kargs

def foo(i, j= 9, *args, k: 11, **kargs)
puts "i: #{i}; args: #{args}; kargs: #{kargs}"
end

foo(a: 7, b: 8)
# i: {:a=>7, :b=>8}; args: []; kargs: {}

关于ruby - 在 Ruby 中收集关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699361/

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