在rails 3.2 , ruby 1.9.3
应用中
尝试对整数执行简单的-1
操作:
在模型上执行此操作:
order_details[:quantity].to_i - 1
并获取ArgumentError: invalid radix -1
试图在线查看,发现文档很少。
任何帮助,请?
答案 0 :(得分:7)
我假设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应该正确解析它。可能是您的实际代码编写为order_details[:quantity].to_i -1
(注意-
和1
之间没有空格),导致它读取-1
,然后将其作为参数传递给{ {1}}。
答案 1 :(得分: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
采用一个参数来指定您计算的基数。
所以你可以将base 16转换成我们的正常基数十,如:
"0xA".to_i(16)
iamnotmaynard正确地将其识别为语法错误,但我认为您需要将-
和1
分开。你可以在第一个元素周围放置括号(它可以工作),但这样会使语法不正确,而不是提供正确的语法。
尝试将元素分开,不带括号:
order_details[:quantity].to_i - 1 # with the space between the 1 and minus sign