Wie bricht man aus einem Rubinblock aus?

Hier istBar#do_things:

class Bar   
  def do_things
    Foo.some_method(x) do |x|
      y = x.do_something
      return y_is_bad if y.bad? # how do i tell it to stop and return do_things? 
      y.do_something_else
    end
    keep_doing_more_things
  end
end

Und hier istFoo#some_method:

class Foo
  def self.some_method(targets, &block)
    targets.each do |target|
      begin
        r = yield(target)
      rescue 
        failed << target
      end
    end
  end
end

Ich habe überlegt, Raise zu verwenden, aber ich versuche, es generisch zu machen, deshalb möchte ich nichts Spezielles hinzufügenFoo.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage