3

以下代码有效:

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如果增量方法中存在异常,该块是否以相同的方式工作?

4

1 回答 1

11

您的next语句必须出现在循环内。increment你的方法里面没有循环。

异常会“冒泡”,因此如果您的方法中有异常increment,它将被rescue调用方法的部分捕获。

于 2013-10-24T01:16:49.110 回答