以下Ruby代码导致:unknown keyword: a (ArgumentError)
:
def test(x={}, y: true); end
test({a:1})
为什么呢?我希望test(**{a:1})
会发生这种情况,但我不明白为什么我的哈希值会在没有双splat的情况下自动扩展。
答案 0 :(得分:3)
由于x是可选的,所以hash转移到kwarg参数。 在这种情况下,未指定的关键字会引发错误:
def foo(name:)
p name
end
foo # raises "ArgumentError: missing keyword: name" as expected
foo({name: 'Joe', age: 10}) # raises "ArgumentError: unknown keyword: age"
查看this文章
答案 1 :(得分:1)
我也发现它是一个错误,因为它的行为非常不一致,仅适用于Symbol
类型的键的哈希:
test({a:1}) # raises ArgumentError
test({'a' => 1}) # nil, properly assigned to optional argument x
method(:test).parameters
=> [[:opt, :x], [:key, :y]]
您可以传递两个参数并开始正确分配它们,但这不是解决方案。
test({a:1}, {y:false}) # nil
为什么这不是一个错误而是预期的行为?