[英]Collecting keyword arguments in Ruby
只是想了解如何在Ruby中收集参数,我想出了以下代码段,在某些情况下,它似乎无法在**kargs
中收集keyword arguments
:
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
,而在第二次调用中却收集了kargs
。
这是因为第一个参数i
是必需参数(没有默认值),因此,传递给方法的第一个值(在您的第一个示例中,这是哈希{a: 7, b: 8}
)存储在其中。
然后,由于其他所有内容都是可选的,因此将其余所有值(如果有,在此示例中为空)填充(如果适用)。 IE,第二个参数将转到j
,除非它是命名参数,否则它将转到kargs
(或k
)。 第三个参数以及直到第一个关键字参数之前的所有剩余参数进入args
,然后所有关键字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: {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.