我正在编写便利方法,以检查数字是正数还是负数,如下所示:
class Numeric
def positive?
self > 0
end
def negative?
self < 0
end
end
但在这种情况下,我不知道如何处理这样的案件:
>> 0.positive?
>> 0.negative?
更新:我更新了班级名称中的拼写错误。我使用数字,因为我也需要检查浮点数。
答案 0 :(得分:9)
Ruby 2.3 introduced Numeric#positive?
and Numeric#negative?
,如果您使用的是Ruby 2.3+,则应使用这两个。
答案 1 :(得分:7)
如果问题是你两者都得到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
正如所料。
答案 2 :(得分:0)
0是Fixnum,请尝试:
p 0.class
&GT;&GT; Fixnum对象
所以,将班级编号更改为班级 Fixnum
我不知道你是否想要将这些方法添加到浮点数/整数中,但你可以这样做:
class Float
...your methods...
end
0.to_f.positive?
有更多的可能性来完成这项任务,所有这些都取决于你想要添加这个方法的类型/类