【发布时间】:2014-01-10 16:13:32
【问题描述】:
我正在尝试为应用程序扩展 Ruby 的 NilClass,以便任何方法调用都将返回 nil(实际上是 self,新扩展的 nil)。目的是避免大量额外的零检查逻辑,例如,
results = data.nil? nil : data.process()
output = results.nil? nil : results.format()
并简单地用
替换它output = data.process().format()
如果链上的任何地方都返回了 nil 结果,则返回 nil。
让一个类响应任意消息很容易:
class SuperNil
def method_missing(sym, *args)
return self
end
end
现在,supernil = SuperNil.new; supernil.anything 返回对象 supernil。但是,这并不是真正的零,因为它会评估为真。它会以某种方式扩展 NilClass 以便我的对象评估为假吗?我遇到麻烦的地方是,即使在扩展 NilClass 之后,我也无法创建 SuperNil 的对象。 NilClass.new 会报错,SuperNil.new 也会报错。
是否可以创建 NilClass 扩展的对象?它会评估为假吗?
【问题讨论】: