Ruby破解表达式很奇怪

时间:2016-03-29 16:13:55

标签: ruby

require 'csv'

i = 0
CSV.foreach("survdata.csv", headers: true) do |row|
  puts row
  i++
  if i > 1 then
    break
  end
end

这看起来很简单,但它并没有运行。你能明白为什么我会这样:

/mydev/surveyresult/surveyresult.rb:11: void value expression

3 个答案:

答案 0 :(得分:1)

Ruby上次看的时候没有增量运算符。

取代

i++

i += 1

答案 1 :(得分:1)

Ruby不支持i++语法作为i+=1的快捷方式。见" Why doesn't Ruby support i++ or i-- (increment/decrement operators)?"了解更多信息。

您可以像这样修复代码:

require 'csv'

i = 0
CSV.foreach("survdata.csv", headers: true) do |row|
  puts row
  i = i+1
  if i > 1 then
    break
  end
end

有关错误消息的更多信息(谢谢sawa):

Ruby实际上支持i++语法。如果后跟x,则会将其解释为应用于+的一元运算符x,其结果作为参数传递给i+。在您的示例中,if i > 1 then; break; end不返回任何值,因此错误消息" void value expression"。

答案 2 :(得分:0)

是。这是因为:

if i > 1 then
  break
end

部分中断,没有返回值(在相关代码块中)。并且您不能将一元运算符+@应用于缺少值的事物,也不能i.+获取诸如参数的返回值。