ArgumentError:无效的基数-1

时间:2013-11-05 16:59:34

标签: ruby-on-rails ruby

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

order_details[:quantity].to_i - 1

并获取ArgumentError: invalid radix -1

试图在线查看,发现文档很少。

任何帮助,请?

2 个答案:

答案 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