Ruby 我如何创建一个实例可以被计算为false的类?
我想创建一个类Ruby 我如何创建一个实例可以被计算为false的类?,ruby,boolean,Ruby,Boolean,我想创建一个类Nilly,以获得一个“伪nil”对象,但我需要将其计算为布尔false e、 g: 我该怎么做 注:我试着用类Nilly
Nilly
,以获得一个“伪nil”对象,但我需要将其计算为布尔false
e、 g:
我该怎么做
注:我试着用
类Nilly
,但我不能使用新的方法(它在NilClass
中被剥离出来)。Ruby中的布尔逻辑只允许nil
和false
成为falsy
其他一切都是真实的
没有办法做到这一点
请问你为什么要这个?
你的Nilly
课程有什么特别之处
我建议你换一种说法
class Nilly
def nil?
true
end
end
在你的逻辑中使用这个
puts n.nil? ? 'false' : 'true'
覆盖新方法:
class Nilly < NilClass
def Nilly.new
end
end
n = Nilly.new
puts n ? 'true' : 'false' #=> I want false here
class Nilly我想在这里输入false
与前两种解决方案不同,这正是您想要的n
实际计算结果为nil,无需使用nil?
方法进行测试。to_s
解决方案之所以有效,是因为您将放入它,它会隐式调用to_s
该死,我总是来得太晚……您只是返回了nil
。在这种情况下,您可以忽略Nilly
定义,并说n=nil
Nope:这正是作者想要的。如果我读对了,他希望一个类“被计算为布尔false”。为此,该类必须是NilClass子类或FalseClass子类tertium non datur。顺便说一句,我没有返回一个nil
。您返回的是一个nil。请尝试你的代码。n完全是零。它不是Nilly的实例。Ruby 1.8.7:n.inspect
返回“nil”。我打开了nily
和def to_s;'零’;end
,但n.to_s
返回“”。在中,作者不想重新定义NilClass#method_missing
,因为这会非常麻烦。因此,我想知道如何使用另一个类来实现这一点。您应该查看ActiveSupport
中定义的try
something.try(:a_方法)
为nil
返回nil
,或者调用something.a_方法
。事实上,如果我只需要一个method_missing
返回nil
的类,并且如果我不需要将其作为布尔值计算,它就不需要继承NilClass
。我会考虑的。是的,我认为答案不是制造一个魔术零,而是以不同的方式来处理你的问题。没有任何例子(谢天谢地:-)这两个问题之间有相似之处,但它们似乎足够不同,值得保留它们。这个问题是关于如何制造一个行为像零的物体,这是如何制造一个虚假的物体。每一个问题都有其独特的答案。
class Nilly < NilClass
def Nilly.new
end
end
n = Nilly.new
puts n ? 'true' : 'false' #=> I want false here