如何创建一个可以将其评估为false的类?

时间:2011-10-14 18:46:55

标签: ruby boolean

我想创建一个类Nilly来获取“伪nil”对象,但我需要将它作为布尔值false进行求值。

e.g:

class Nilly; end

n = Nilly.new

puts n ? 'true' : 'false'    #=>  I want false here

我该怎么做?

P.S。:我尝试class Nilly < NilClass,但我没有使用new方法(它在NilClass中删除了。)

2 个答案:

答案 0 :(得分:1)

Ruby中的布尔逻辑只允许nilfalsefalsy

其他所有内容都是truthy

没有办法做到这一点。

我可以问你为什么要这样吗? 你的Nilly班有什么特别之处?

我建议你用不同的方式称呼它。

class Nilly
  def nil?
    true
  end
end

并在你的逻辑中使用它

puts n.nil? ? 'false' : 'true'

答案 1 :(得分:0)

覆盖新方法:

class Nilly < NilClass
  def Nilly.new
  end
end

n = Nilly.new
puts n ? 'true' : 'false'    #=>  I want false here

与前两个解决方案不同,这完全符合您的要求。 n实际上评估为nil,而不需要使用nil?方法进行测试。 to_s解决方案仅适用,因为您puts它,隐式调用to_s