gpt4 book ai didi

ruby - 我怎样才能将双重 splat 参数折叠成空?

转载 作者:数据小太阳 更新时间:2023-10-29 07:39:16 24 4
gpt4 key购买 nike

在方法调用中展开空数组有效地将参数减少为空(为清楚起见添加了空括号):

def foo()
end

def bar(*args)
foo(*args)
end

bar(1) # ArgumentError, as expected
bar() # works

但这同样不适用于散列参数:

def baz()
end

def qux(**opts)
baz(**opts)
end

qux # ArgumentError, **opts becomes {}

我可以通过显式检查空哈希来解决这个问题:

def quux(callable, **opts)
if opts.empty?
callable.()
else
callable.(**opts)
end
end

c = ->{}
quux(c) # works

但是有没有更好/更好的方法来做到这一点,或者是否计划改变这种行为?在写barqux时,我不知道foobaz的签名,因为后者是一部分类似工厂的构造函数包装器。

最佳答案

尝试以下操作:

def baz()
end

def qux(**opts)
baz(*opts)
end

qux

要进一步了解 *hash 的工作原理,请尝试以下操作:

h = {}
puts h # {}
puts *h # nothing output
puts **h #{}

关于ruby - 我怎样才能将双重 splat 参数折叠成空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27821422/

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