![](/img/trans.png)
[英]splat operator on hash for keyword arguments in ruby method definition
[英]Ruby automatically expands Hash into keyword arguments without double splat
下面的Ruby代码导致: unknown keyword: a (ArgumentError)
:
def test(x={}, y: true); end
test({a:1})
为什么? 我希望这会发生在test(**{a:1})
,但我不明白为什么我的哈希是在没有双splat的情况下自动扩展的。
由于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"
看看这篇文章
我也发现它是一个bug,因为它的行为非常不一致,只适用于带有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
有什么理由说这不是一个bug而是一个预期的行为?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.