Gli errori con ruby

Salve.
ho uno script di questo tipo:


Thread.new do
miooggetto.metodo
end

Quello che succede è che se c’è un errore all’interno del codice di
miooggetto.metodo, questo non mi viene segnalato da ruby, lo script
sembra si esegua fino al punto dove poi c’è l’errore e poi rimanga
bloccato.
Se porto il codice buggato al di fuori del metodo e lo provo su uno
script di prova, l’errore mi viene invece segnalato.
Perchè?

Simone [email protected] writes:

Quello che succede è che se c’è un errore all’interno del codice di
miooggetto.metodo, questo non mi viene segnalato da ruby, lo script
sembra si esegua fino al punto dove poi c’è l’errore e poi rimanga
bloccato.
Se porto il codice buggato al di fuori del metodo e lo provo su uno
script di prova, l’errore mi viene invece segnalato.
Perchè?

É il comportamento di default. Il thread principale non muore se un
figlio scatena un’eccezione. Se setti Thread.abort_on_exception a true
allora avrai il comportamento che desideri. Es.

class Foo
def bar
1 / 0
end
end
a = Foo.new

Thread.abort_on_exception = true
Thread.new do
a.bar
end

puts “Not reached”

Invece che generare un abort di ruby puoi sempre gestire gli errori in
maniera piu’ completa con begin,rescue, ensure, etc.

Ciao