Ruby的Number类和0的便捷方法

我正在编写便利方法来检查数字是正数还是负数,如下所示:

class Numeric def positive? self > 0 end def negative? self < 0 end end 

但在这种情况下,我不知道如何处理这样的情况:

 >> 0.positive? >> 0.negative? 

更新 :我已经更新了class级名称中的拼写错误。 我使用数字因为我也需要检查花车。

如果问题是你两者都是false的,要么你认为0是积极的。 如果是这样,你应该有类似的东西:

 def positive? self >= 0 end 

如果没有,保持原样,因为0既不是正面也不是负面,你应该为两者都返回false。

但是如果问题是你的错误是0.positive? (更有可能),你遇到问题的原因是因为0是一个FixNum ,而不是一个Number 。 您可以通过以下消息看到:

 testprog.rb:12: undefined method `positive?' for 0:Fixnum (NoMethodError) 

您应该将它添加到Fixnum本身,或IntegerNumeric ,它是各种数字类型(如FixNumBigNum的基类。 注入便利方法的地方取决于您希望它们的可用范围。

例如,如果您将代码更改为以下(我在此处包含测试代码):

 class Numeric def positive? self > 0 end def negative? self < 0 end end print " 0 positive?: ", 0.positive?,"\n" print " 0 negative?: ", 0.negative?,"\n" print " 0 zero? : ", 0.zero?,"\n\n" print "99 positive?: ", 99.positive?,"\n" print "99 negative?: ", 99.negative?,"\n" print "99 zero? : ", 99.zero?,"\n\n" print "-2 positive?: ", -2.positive?,"\n" print "-2 negative?: ", -2.negative?,"\n" print "-2 zero? : ", -2.zero?,"\n\n" 

它然后工作正常,输出:

  0 positive?: false 0 negative?: false 0 zero? : true 99 positive?: true 99 negative?: false 99 zero? : false -2 positive?: false -2 negative?: true -2 zero? : false 

正如所料。

Ruby 2.3 引入了Numeric#positive?Numeric#negative? 如果您使用的是Ruby 2.3+,则应使用这两个。

0是Fixnum,尝试:

 p 0.class 

>> Fixnum

所以,将类Number更改为类Fixnum

我不知道你是否想要将这些方法添加到浮点数/整数,但你可以这样做:

 class Float ...your methods... end 0.to_f.positive? 

有更多的可能性来完成这项任务,所有这些都取决于你想要添加这个方法的类型/类