Ein "begin...end"-Block kann einen Codebereich abgrenzen. Typischerweise wird damit die Fehlerbehandlung durchgeführt.
begin puts "a bare begin/end alone isn't terribly useful' end
begin
puts "however when used with a rescue, exception handling results"
raise Exception.new("my exception")
rescue Exception => e
puts e.backtrace
end
Ein "begin...end"-Block kann alleine mit einem oder mehreren "rescue"-Blöcken und/oder einem "ensure"-Block stehen.
begin
puts "ensure blocks are useful for cleaning up resources regardless of errors that may occur"
f = File.open("myfile")
raise Exception.new
rescue NameError => n
# no NameError raised, so we'll not get here
ensure
# but we'll always get here, unless the interpreter or thread terminates
f.close
end
Hinweis: Die Sichtbarkeit lokaler Variablen in Ruby bezieht auch die "begin...end"-Blöcke mit ein. Es gibt nur eine Sichtbarkeit innerhalb einer Methode (Variablen mit Blocksichtbarkeit aussen vorgelassen).
Die anonyme Form von "rescue" fängt nur Ausnahmen ab, die von StandardError abstammen:
begin eval "\"" # raises a SyntaxError rescue => e # The SyntaxError will not be caught end
Vergleich mit:
begin
raise NameError.new("Some name error")
rescue => e
# The NameError will be caught
end