gpt4 book ai didi

ruby - 如何确定是否在 ruby​​ 方法中给出了可选参数

转载 作者:数据小太阳 更新时间:2023-10-29 06:52:05 25 4
gpt4 key购买 nike

我有一个带有可选参数的方法。我如何确定是否给出了 Argument?

我想出了以下解决方案。我问这个问题是因为我对其中任何一个都不完全满意。还有更好的吗?

nil 作为默认值

def m(a= nil)
if a.nil?
...
end
end

这个的缺点是,无法确定是没有参数还是 nil 被给出。

自定义 NoArgument 作为默认值

class NoArgument
end

def m(a= NoArgument.new)
if NoArgument === a
...
end
end

是否给定nil是可以判断的,但是NoArgument的实例也存在同样的问题。

评估省略号的大小

def m(*a)
raise ArgumentError if m.size > 1
if m.size == 1
...
end
end

在这个变体中,总是可以决定是否给出了可选参数。然而,此方法的 Proc#arity 已从 1 更改为 -1(不正确,请参阅注释)。它仍然有一个缺点,那就是更难记录并且需要手动引发 ArgumentError。

最佳答案

Jorg W Mittag 拥有 following code snippet可以做你想做的事:

def foo(bar = (bar_set = true; :baz))
if bar_set
# optional argument was supplied
end
end

关于ruby - 如何确定是否在 ruby​​ 方法中给出了可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705389/

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