为什么"loop do"抛出无效值错误?



我在意见中使用了琐碎的代码,例如这个

loop do 
    i++
    break if i > 5
end 

但是当我尝试运行时,我会得到void value expression break if i > 5

我在做什么错?这个错误是什么意思?

i = 0
loop do
  i += 1
  break if i > 5
end

是什么让您自行认为i++有效Ruby Code?

尽管红宝石语法通常很容易猜测,但不要以为它类似于其他语言构造。

Ruby也有更好的模式可以做事。我的第二个例子是您想要的示例。

i = 0
loop do 
    i = i + 1 # or shorthand i += 1
    puts i
    break if i > 5
end 

实际上这很重要。您的break应该在开始。

更好的方法

1.upto 5 do |i|
 puts i
end

这计算为5。

i++可能是完全有效的。例如,

1++ 3
  #=> 4
1++
3
  #=> 4

那是因为这两种表达式都被解释为

1 + +3

,然后

1 + 3
  #=> 4

因此,您的表达等于

loop do 
  i + (break if i > 5)
end 

由于break if i > 5不返回值,因此提出了void value异常。

你想要

i = 0
loop do 
  i += 1
  break if i > 5
end
i #=> 6

或(我的喜好)

i = 0
loop do 
  i += 1
  raise StopIteration if i > 5
end
i #=> 6

内核#循环通过突破循环来处理StopIteration例外。

最新更新