我想创建一个类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
中删除了。)
答案 0 :(得分:1)
Ruby中的布尔逻辑只允许nil
和false
为falsy
其他所有内容都是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
。