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
本身,或Integer
或Numeric
,它是各种数字类型(如FixNum
和BigNum
的基类。 注入便利方法的地方取决于您希望它们的可用范围。
例如,如果您将代码更改为以下(我在此处包含测试代码):
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?
有更多的可能性来完成这项任务,所有这些都取决于你想要添加这个方法的类型/类