Если проблема в том, что вы получаете 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
как и ожидалось.