在rails 3.2 , ruby 1.9.3
应用程序中尝试对-1
整数执行简单操作:在模型上执行此操作:
order_details[:quantity].to_i - 1
并得到ArgumentError: invalid radix -1
试着在网上查了一下,发现文档很少。
有什么帮助吗?
在rails 3.2 , ruby 1.9.3
应用程序中尝试对-1
整数执行简单操作:在模型上执行此操作:
order_details[:quantity].to_i - 1
并得到ArgumentError: invalid radix -1
试着在网上查了一下,发现文档很少。
有什么帮助吗?
我假设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
-1
to_i
我认为你的问题是你的代码真的是这样的:
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