6

文字列とデフォルト値を取り、文字列が整数を表している場合は整数に変換するか、そうでない場合はデフォルト値を返すRubyメソッドはありますか?

更新 次の答えが望ましいと思います:

class String
  def try_to_i(default = nil)
    /^\d+$/ === self ? to_i : default
  end
end

例外を避けるべき理由は次のとおりです。

> def time; t = Time.now; yield; Time.now - t end

> time { 1000000.times { |i| ('_' << i.to_s) =~ /\d+/ } }
=> 1.3491532 
> time { 1000000.times { |i| Integer.new('_' << i.to_s) rescue nil } }
=> 27.190596426 
4

3 に答える 3

8

変換する必要があり#to_iます。Integer()1 つ目のデフォルトは 0 で、2 つ目は ArgumentError を発生させます。

class String
  def to_integer(default)
    Integer(self)
  rescue ArgumentError
    default
  end
end
于 2012-04-26T11:44:51.450 に答える
2

おそらく正規表現を使用して文字列をチェックして、自分でコーディングする必要があります。

def try_to_i(str, default = nil)
  str =~ /^-?\d+$/ ? str.to_i : default
end
于 2012-04-26T11:44:08.900 に答える
-1

次のようなことができます。

int_value = (stringVar.match(/^(\d+)$/) && $1.to_i) || default_value

文字列が完全に数字で構成されているかどうかを確認し、そうである場合は int に変換するか、デフォルト値を返します。

于 2012-04-26T11:46:38.733 に答える