gpt4 book ai didi

ruby - 严格将字符串转换为整数(或零)

转载 作者:数据小太阳 更新时间:2023-10-29 06:21:38 25 4
gpt4 key购买 nike

对于网络编程,数字以字符串形式出现。但是 to_i 会将 "5abc" 转换为 5 并将 "abc" 转换为 0 ,都是错误的答案。为了捕获这些,我写道:

def number_or_nil( s )
number = s.to_i
number = nil if (number.to_s != s)
return number
end

是否有一种更简洁、更符合 Ruby 标准的方法来完成此转换并检测该字符串不是数字?

最佳答案

使用整数(字符串)

如果字符串无法转换为整数,它将引发 ArgumentError 错误。

Integer('5abc') #=> ArgumentError: invalid value for Integer(): "5abc"
Integer('5') #=> 5

如果您希望在无法转换字符串时返回 nil 的行为,您仍然需要 number_or_nil 方法。

def number_or_nil(string)
Integer(string || '')
rescue ArgumentError
nil
end

你应该小心地从一个特定的异常中拯救出来。简单的救援(例如“rescue nil”)将从任何继承自 StandardError 的错误中解救出来,并可能以您不希望的方式干扰程序的执行。 Integer() 将引发 ArgumentError,因此请指定。

如果您不想处理异常而只是喜欢较短的 number_or_nil 版本,您可以利用隐式返回值并将其写为:

def number_or_nil(string)
num = string.to_i
num if num.to_s == string
end

number_or_nil '5' #=> 5
number_or_nil '5abc' #=> nil

这将按您预期的方式工作。

关于ruby - 严格将字符串转换为整数(或零),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24980295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com