3

rails 3.2 , ruby 1.9.3应用程序中尝试对-1整数执行简单操作:在模型上执行此操作:

order_details[:quantity].to_i - 1

并得到ArgumentError: invalid radix -1

试着在网上查了一下,发现文档很少。

有什么帮助吗?

4

2 回答 2

8

我假设order_details[:quantity]是一个String(尽管答案是一样的)。

String#to_i接受一个可选参数作为数字被解释为的基数。例如"10101".to_i(2),将解析为以 2 为底(21结果为小数)。您的代码行被解释为

order_details[:quantity].to_i(-1)

并且由于负数 ( -1) 的基数没有意义,因此它会给您带来该错误。解决方案是将括号放在周围order_details[:quantity].to_i,以便首先对其进行评估:

(order_details[:quantity].to_i) - 1

编辑:或者,确保-两个参数之间有一个空格(或者两边都没有空格),并且 Ruby 应该正确解析它。可能是您的实际代码编写为(注意andorder_details[:quantity].to_i -1之间没有空格)导致它读取然后将其作为参数传递给.-1-1to_i

于 2013-11-05T17:07:06.573 回答
1

我认为你的问题是你的代码真的是这样的:

order_details[:quantity].to_i -1 # with the minus sign right next to the one

Ruby 将其解析为:

order_details[:quantity].to_i(-1)

在 Ruby 中,方法参数不需要(总是)用括号括起来,并且to_i需要一个参数来指定您计数的基数。

因此,您可以将基数 16 转换为我们正常的基数 10,例如:

"0xA".to_i(16)

iamnotmaynard 正确地将其识别为语法错误,但我认为您需要将-and分开1。您可以在第一个元素周围加上括号(它有效),但这更像是短路不正确的语法,而不是提供正确的语法。

尝试在没有括号的情况下将元素分开:

order_details[:quantity].to_i - 1 # with the space between the 1 and minus sign
于 2013-11-05T17:13:46.087 回答