2009-10-09 7 views

Odpowiedz

189

Metoda "def" może służyć jako "begin" stwierdzeniem:

def foo 
    ... 
rescue 
    ... 
end 
+0

Dzięki Właśnie chciał wiedzieć, jak to działa. To prawie to, czego szukałem. Dziękuję Ci. – Sid

+2

Również definicje klas, definicje modułów i (jak sądzę) 'do'/'end' literały blokowe tworzą niejawne bloki wyjątków. –

+0

czy możesz zrobić także ratę obronną? –

41

Można też ratować inline: "Exception"

1 + "str" rescue "EXCEPTION!" 

wypisze od „String nie może być zmuszany do Fixnum”

+1

Jak można uratować i wyświetlać wyjątek backtrace inline? –

+0

jak zwrócić faktyczny wyjątek? – user1735921

21

używam def/kombinację ratunkowego Wiele z walidacji ActiveRecord:

def create 
    @person = Person.new(params[:person]) 
    @person.save! 
    redirect_to @person 
rescue ActiveRecord::RecordInvalid 
    render :action => :new 
end 

Myślę, że to kod bardzo chudy!

14

Przykład:

begin 
    # something which might raise an exception 
rescue SomeExceptionClass => some_variable 
    # code that deals with some exception 
ensure 
    # ensure that this code always runs 
end 

Tutaj def jako begin stwierdzeniem:

def 
    # something which might raise an exception 
rescue SomeExceptionClass => some_variable 
    # code that deals with some exception 
ensure 
    # ensure that this code always runs 
end 
Powiązane problemy