我正在编写方便方法来检查数字是正数还是负数,如下所示:
class Numeric
def positive?
self > 0
end
def negative?
self < 0
end
end
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我不知道如何处理这样的情况:
>> 0.positive?
>> 0.negative?
Run Code Online (Sandbox Code Playgroud)
更新:我已经更新了班级名称中的拼写错误.我使用数字因为我也需要检查花车.
如果问题是你要false
两者兼顾,要么你认为0
是积极的.如果是这样,你应该有类似的东西:
def positive?
self >= 0
end
Run Code Online (Sandbox Code Playgroud)
如果没有,请保持原样,因为0
既不是正面也不是负面,你应该为两者都返回false.
但是,如果问题是你得到错误0.positive?
(更有可能),那么你遇到问题的原因是因为0
是a FixNum
而不是a Number
.您可以通过以下消息看到:
testprog.rb:12: undefined method `positive?' for 0:Fixnum (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
您应该将它添加到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"
Run Code Online (Sandbox Code Playgroud)
它然后工作正常,输出:
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
Run Code Online (Sandbox Code Playgroud)
正如所料.
归档时间: |
|
查看次数: |
7815 次 |
最近记录: |