> > Hola gente del grupo,
> > viniendo del mundo de Java, en su momento aprendí a tomarle el
> > gustito al tema de las Chained Exceptions, un mecanismo que provee la
> > Exception base de Java (en realidad <<i>> Throwable) desde la versión
> > 1.4 (anteriormente había n versiones duplicadas, siendo n la cantidad
> > de programadores Java en el mundo).
> > Este mecanismo permite wrapear excepciones de un nivel inferior al
> > que estamos trabajando para transformarla de manera que el cliente no
> > deba lidiar con exceptions que sean crípticas y específicas de una
> > implementación, sino sólo con otras que formen parte de la API del
> > servicio que se está proveyendo (imaginen si un_model.save! lanzara un
> > "NameError").
> > Normalmente se rescata una exception y se lanza otra, pero el
> > problema es que en ese momento se pierde toda la información (clase,
> > message y backtrace) de la originaria, que resulta útil para debug.
> >
> > Obviamente, esto salta cuando se intenta crear alguna abstracción (no
> > cuando nosotros somos los clientes).
> >
> > El tema es que en Ruby no encuentro algún mecanismo similar, y
> > mirando los fuente de ActiveRecord me encuentro que no se usa (de
> > hecho, se ataja una y se lanza otra sin más).
> >
> > ¿Alguien alguna vez tuvo alguna experiencia al respecto? ¿Algún alma
> > ex-Java convertida?
> >
>
> Algo asi???:
>
> begin
> 0/0
> rescue Exception => e
> p "Tu exception era: #{e}"
> raise 'Pero mejor aprende a dividir'
> end
>
> rescue y raise (para tirar otra) serian la solucion.
>
> Tiras una que vos creas u otra de las Built-in Exceptions.... No se si
> te entendi bien o era lo que buscabas, de cualquier manera suerte con
> eso!
La gracia es que cuando te muestra el stack trace, te muestra tanto
las de la excepción original como la de la nueva.
sería algo así:
begin
0/0
rescue Exception => e
raise MejorAprendeException.new("a dividir", e) #que la llamo maex
end
y cuando se hace
p maex.back_trace
muestra los backtraces de las 2 excepciones (e y maex)
Si lo implementán como algo que se le agrega a Exception estaría
buenísimo (y es probable que lo acepten de toque en
http://facets.rubyforge.org/).
Un abrazo,
Aureliano.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar