我在我看来使用琐碎的代码,比如这个
loop do
i++
break if i > 5
end
但是当我尝试跑步时,我会得到void value expression break if i > 5
答案 0 :(得分:2)
i = 0
loop do
i += 1
break if i > 5
end
答案 1 :(得分:2)
是什么让你认为i++
本身就是有效的Ruby代码?
虽然Ruby语法通常很容易猜到,但不要认为它类似于其他语言结构。
Ruby也有更好的模式来做事。我的第二个例子是你想要的一个例子。
i = 0
loop do
i = i + 1 # or shorthand i += 1
puts i
break if i > 5
end
实际上,这会计入6.您的break
应该在开头。
更好的方法
1.upto 5 do |i|
puts i
end
这计为5。
答案 2 :(得分:1)
i++
可能完全有效。例如,
1++ 3
#=> 4
1++
3
#=> 4
这是因为这两个表达式都被解析为
1 + +3
然后到
1 + 3
#=> 4
因此,您的表达式等同于
loop do
i + (break if i > 5)
end
引发了void value
异常,因为break if i > 5
未返回值。
你想要
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
Kernel#loop通过突破循环来处理StopIteration
异常。