> > 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

Responder a