def test(a, b = {}, c: 1)
[a, b, c]
end
test 1, {hello: :world}
我希望这个输出是:
[1, {hello: :word}, 1]
但我得到了:
ArgumentError: unknown keyword: hello
我读过一些像https://makandracards.com/makandra/36011-ruby-do-not-mix-optional-and-keyword-arguments
这样的网页建议不要将可选参数与关键字参数混合使用。
可以使这项工作吗?
答案 0 :(得分:2)
如果你想要这个确切的签名,你可能应该使用双重splat来b
参数:
def test(a, c: 1, **b)
[a, b, c]
end
test 1, {hello: :world}
#⇒ [1, {hello: :word}, 1]
当命名关键字参数和哈希本身紧接在命名关键字之前传递时,存在区分命名关键字参数和哈希本身的问题。