If the problem is that you're getting false
for both, either you consider 0
to be positive or not. If so, you should have something like:
def positive?
self >= 0
end
If not, leave it as it is, since 0
is neither positive not negative and you should return false for both.
However if the problem is that you're getting errors with 0.positive?
(far more likely), the reason you're getting a problem is because 0
is a FixNum
, not a Number
. You can see that with the following message:
testprog.rb:12: undefined method `positive?' for 0:Fixnum (NoMethodError)
You should probably add it to Fixnum
itself, or Integer
, or Numeric
, the base class for various numeric types like FixNum
and BigNum
. Where you inject your convenience methods depends on how widely you want them available.
For example, if you change your code to the following (I'm including test code here):
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"
it then works fine, outputting:
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
as expected.