Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 我如何创建一个实例可以被计算为false的类?_Ruby_Boolean - Fatal编程技术网

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