使用单个星号(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'
除了美观的对称性外,使用双星号在方法调用中还有其他实际的原因吗?(请注意,这与在方法定义中使用它们是不同的)
**
的类似问题,有一个相关信息。接受答案的评论稍微涉及到使用**
对参数的影响。 - Daniël Knippers