1, :a => 2}) 我得到 {"-6ren">
gpt4 book ai didi

ruby 关键字参数解构

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:36 25 4
gpt4 key购买 nike

我有简单的功能

def fn(x,a:nil)
"#{x.inspect} - #{a.inspect}"
end

并执行 puts fn({ 'v' => 1, :a => 2}) 我得到 {"v"=>1, :a=>2} -无如预期。

但是如果我将 x 设为可选,如 def fn(x=nil,a:nil),我会意外地得到 {"v"=> 1} - 2,即 a 部分已从散列中删除并放入关键字参数中。

为什么只有当 x 是可选的时才会发生这种情况?

(我知道调用等同于 fn('v' => 1, :a => 2),使用它确实不会改变行为。)

debian ruby 2.1.5p273,同RHEL ruby 2.0.0p598

最佳答案

Ruby 将散列隐式转换为关键字参数,这是一篇好文章:https://makandracards.com/makandra/36013-heads-up-ruby-implicitly-converts-a-hash-to-keyword-arguments

因此,他们建议您不要混合使用关键字和可选参数:https://makandracards.com/makandra/36011-ruby-do-not-mix-optional-and-keyword-arguments

关于ruby 关键字参数解构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com