使用默认值将Ruby String转换为Integer

时间:2012-04-26 11:39:51

标签: ruby integer type-conversion

是否有一个带有字符串和默认值的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 

3 个答案:

答案 0 :(得分:8)

要转换#to_iInteger()。第一个默认值为 0,第二个引发ArgumentError。

class String
  def to_integer(default)
    Integer(self)
  rescue ArgumentError
    default
  end
end

答案 1 :(得分:2)

您必须自己编写代码,可能使用正则表达式来检查字符串:

def try_to_i(str, default = nil)
  str =~ /^-?\d+$/ ? str.to_i : default
end

答案 2 :(得分:-1)

你可以这样做:

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

这将看到字符串是否完全由数字组成,如果是,则转换为int,或返回默认值。