I'm writing convenience methods to check if number is positive or negative like so:
class Numeric
def positive?
self > 0
end
def negative?
self < 0
end
end
but in this case I do not know how to handle cases like these:
>> 0.positive?
>> 0.negative?
Update: I've updated the typo in the class name. I used numeric because I needed to check the floats as well.
Ruby 2.3 introduced Numeric#positive?
and Numeric#negative?
, if you are on Ruby 2.3+, should use these two instead.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With