gpt4 book ai didi

ruby - 仅接受 nil 参数是设置了实例变量

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

我想创建一个需要值的函数,除非它已经创建了一个实例值。但是,我不想让参数默认为 nil,而是希望它优雅地知道它是否需要接受一个参数。例如,

def config(c)
@config ||= c
end

如果我调用它,将返回 @config,但当我尝试不带参数调用它时,将给出一个 ArgumentError。如果实例变量存在,我可以使函数不需要参数吗?

最佳答案

Ruby 不提供任何工具来执行此操作,但为什么不像这样自己引发 ArgumentError:

def config(c = nil)
raise ArgumentError unless c || @config
@config ||= c
end

或者,Ruby 2.0 通过关键字参数提供类似这样的东西:

class A
def config c: (@config or raise ArgumentError)
@config = c
end
end

a = A.new
a.config #=> ArgumentError
a.config(c: 2) #=> 2
a.config #=> 2

当然,也许您真正应该做的只是使用普通设置方法(即 def config=(value) ...)或简单地 attr_accessor :config .也就是说,至少在您的基本示例中,这是最惯用的方法。

关于ruby - 仅接受 nil 参数是设置了实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561479/

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