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_iInteger()转换。第一个默认值为 0,第二个引发 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 回答