Tag: double splat

关键字参数在Ruby中解包(splat)

下面发生的事情对我来说似乎有点奇怪。 def f(a, b) puts “#{a} :: #{b}” end f(*[1, 2], **{}) # prints “1 :: 2” hash = {} f(*[1, 2], **hash) ArgumentError: wrong number of arguments (3 for 2) f(*[1, 2], **Hash.new) ArgumentError: wrong number of arguments (3 for 2) 这是编译器优化function吗?

双splat运算符破坏性地修改哈希 – 这是一个Ruby错误吗?

我注意到我发现Ruby 2.1.1中的** (双splat)运算符是一个非常令人惊讶的行为。 在**hash之前使用键值对时,哈希保持不变; 但是,当键值对仅在**hash之后使用时,哈希值将被永久修改。 h = { b: 2 } { a: 1, **h } # => { a: 1, b: 2 } h # => { b: 2 } { a: 1, **h, c: 3 } # => { a: 1, b: 2, c: 3 } h # => { b: 2 } […]