【发布时间】:2013-11-02 12:33:27
【问题描述】:
以下代码有效:
collection.each do |i|
begin
next if i > 10
i += 1
rescue
puts "could not process #{ i }"
end
end
但是,当我们重构时:
collection.each do |i|
begin
increment i
rescue
puts "could not process #{ i }"
end
end
def increment i
next if i > 10
i += 1
end
我收到invalid next 错误。这是 Ruby (1.9.3) 的限制吗?
如果增量方法出现异常,begin rescue 块的工作方式是否相同?
【问题讨论】:
-
我的问题是他希望
next做什么? -
是的,这是一个简化的例子。如果我发布生产代码,它会掩盖问题。
-
这不是一个“限制”,而是一个设计决定,而且是一个好的决定。您不应该能够将
next移出循环上下文。你也不能用任何其他语言。 -
除了您试图从方法调用更改循环流这一事实之外,方法
increment内的i的范围是该方法的本地范围。所以它变成了一个不同于循环中的i。不仅next不能那样工作,i的增量也不能那样工作。
标签: ruby iterator enumerable