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

Vla*_*off 12 ruby hash keyword-argument double-splat ruby-2.2

下面发生的事情对我来说似乎有点奇怪.

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)
Run Code Online (Sandbox Code Playgroud)

这是编译器优化功能吗?

saw*_*awa 9

这是一个Ruby的错误已被多次报告(例如我在这里)但尚未修复.

我想由于引入了关键字参数功能,双splat语法变得模糊不清,这就是这个bug的间接原因.我听说Matz正在考虑在未来的Ruby版本中引入一种新的语法来区分哈希和关键字参数.