我想创建一个需要值的函数,除非它已经创建了一个实例值.但是,我不想在nil默认情况下创建参数,而是希望它优雅地知道它是否需要接受参数.例如,
def config(c)
@config ||= c
end
Run Code Online (Sandbox Code Playgroud)
@config如果我打电话给它会返回,但是ArgumentError当我试图在没有争论的情况下调用它时会给出一个.我可以使函数不需要参数是实例变量存在吗?
Ruby没有提供任何工具来做到这一点,但为什么不自己提升ArgumentError如下:
def config(c = nil)
raise ArgumentError unless c || @config
@config ||= c
end
Run Code Online (Sandbox Code Playgroud)
或者,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
Run Code Online (Sandbox Code Playgroud)
当然,也许你真正应该做的只是使用正常的设置方法(即def config=(value) ...)或简单attr_accessor :config.也就是说,至少在你的基本例子中,这是最惯用的方式.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |