我有一个字符串,比如'123',我想把它转换成整数123.

我知道你可以简单地做some_string.to_i,但这将'lolipops'转化为0,这不是我想要的效果.我希望当我试图转换一些无效的东西时,它会在我的脸上爆炸,伴随着一个美好而痛苦的过程.否则,我无法区分有效的0和根本不是数字的东西.

EDIT:.我在寻找一种标准的方式来做这件事,而不是用regex欺骗.

推荐答案

Ruby内置了以下功能:

Integer('1001')                                    # => 1001  
Integer('1001 nights')  
# ArgumentError: invalid value for Integer: "1001 nights"  

正如答案Joseph Pecoraro中所指出的,您可能需要注意有效的非十进制数字字符串,例如以0x开头的十六进制数字和以0b开头的二进制数字,以及可能更复杂的以零开头的数字,这些数字将被解析为八进制数.

Ruby 1.9.2为基数添加了可选的第二个参数,因此可以避免上述问题:

Integer('23')                                     # => 23
Integer('0x23')                                   # => 35
Integer('023')                                    # => 19
Integer('0x23', 10)
# => #<ArgumentError: invalid value for Integer: "0x23">
Integer('023', 10)                                # => 23

Ruby相关问答推荐

Go和Ruby之间的互操作性:验证RSA签名

有没有办法把条件语句写得更干净?

关键字if是什么对象类型/类?

如何判断 Ruby 文件是否为空?

方法应该以 (?问号)结尾吗?只返回一个布尔值?

如何在 ruby​​ 中列出当前范围内的当前可用对象?

Ruby检测方法

Ruby:如何计算相对于另一个路径的路径?

使用 Ruby MiniTest 之前/之后的套件

Ruby Koan 151 引发异常

Ruby 设计模式:如何制作可扩展的工厂类?

include_examples和it_behaves_like有什么区别?

在 ruby​​ 的超类中调用另一个方法

野外的好黄瓜例子?

计算文件中的行数而不将整个文件读入内存?

判断散列的键是否包含所有键集

如何传递函数而不是块

Array.empty 的相反方法是什么?或 [].empty?在Ruby中

等号 ('=') 放在方法定义中的方法名称之后有什么作用?

如何在 Ruby 中实现回调?