【发布时间】:2014-05-05 09:24:57
【问题描述】:
使用单个 splat,我们可以将数组扩展为多个参数,这与直接传递数组有很大不同:
def foo(a, b = nil, c = nil)
a
end
args = [1, 2, 3]
foo(args) # Evaluates to foo([1, 2, 3]) => [1, 2, 3]
foo(*args) # Evaluates to foo(1, 2, 3) => 1
但是,对于关键字参数,我看不出有什么区别,因为它们只是哈希的语法糖:
def foo(key:)
key
end
args = { key: 'value' }
foo(args) # Evaluates to foo(key: 'value') => 'value'
foo(**args) # Evaluates to foo(key: 'value') => 'value'
除了漂亮的对称性之外,还有什么实际理由在方法调用上使用双板? (请注意,这与在方法定义中使用它们不同)
【问题讨论】:
-
A similar question about
**在方法的定义中包含一些相关信息。对已接受答案的评论谈到了使用**对参数的影响。 -
您应该提取该评论并将其放在这里,完美回答问题。
-
@DaniëlKnippers 是的,请这样做:)
-
我现在在手机上,如果其他人或您自己将其发布为答案也没关系 :-)
标签: ruby syntax double-splat