我的rails应用程序今天才开始收到此错误。这是代码上下文。它将错误放在以new_host_id
while @host_ids.include?(new_host_id)
i++
new_host_id = duplicate_host_id + i.to_s
end
答案 0 :(得分:8)
Ruby 没有<{1}}运算符。
Ruby中的成语是++
,它是i += 1
的缩写形式。
最初我认为发布的代码不正确,必须i = i + 1
才能生成该错误。但是,正如JörgWMittag在评论中解释的那样,情况并非如此:
[..] Ruby允许运算符和操作数之间的空格(包括换行符),因此整个事物被解释为
++i
[..这就是为什么NoMethodError引用String。
这是一个显示问题的简化示例(发布的代码引用第一种情况):
> x = "hello" > +x undefined method `+@' for "hello":String (NoMethodError) > x+ syntax error, unexpected $end
我使用上面的i + (+(new_host_id = duplicate_host_id + i.to_s))
而不是+
来简化示例:Ruby将++
和++i
视为制作i++
和[粗略] {{ 1}} ..
答案 1 :(得分:2)
事实证明错误是由前一行i++
我将i++
更改为i = i + 1
,现在正在使用。
这是工作代码
while @host_ids.include?(new_host_id)
i = i + 1
new_host_id = duplicate_host_id + i.to_s
end
答案 2 :(得分:2)
如果你有警告,你可能会收到有关该行的警告。
$VERBOSE = true
def foo
i = 2
i++
j = 5
j + i
end
warning: possibly useless use of + in void context