私はそれを行う別の方法を提案したいと思います。また、あなたが「正の」整数を尋ねたので、私は正の整数と非負の整数のために2つの別々の方法を作りました。
class String
def numeric?
!self.match(/[^0-9]/)
end
def positive_integer?
self.to_i > 0
end
def nonnegative_integer?
self.to_i > 0 or self == '0'
end
end
ベンチマークコードは次のとおりです。
require 'benchmark'
include Benchmark
bmbm(100) do |x|
x.report('numeric?') do
"some invalid string".numeric?
end
x.report('positive_integer?') do
"some invalid string".positive_integer?
end
x.report('nonnegative_integer?') do
"some invalid string".nonnegative_integer?
end
end
結果:
numeric?
0.000000 0.000000 0.000000 ( 0.000045)
positive_integer?
0.000000 0.000000 0.000000 ( 0.000012)
nonnegative_integer?
0.000000 0.000000 0.000000 ( 0.000015)
このマイクロベンチマークでは、より高速であるように見えpositive_integer?
ます。nonnegative_integer?
integer?
最後に、補足として、同様の方法でメソッドを定義できます。
class String
def integer?
self.to_i.to_s == self
end
end