Hola, Se que es una pregunta muy simple pero no entiendo el funcionamiento de Ruby en estos casos. Un metodo esta devolviendome una cadena vacia pero desde donde lo llamo recibo un true. Un objeto TrueClass. Tiene sentido?? Como puedo, pues, devolver una cadena vacia y obtenerla tal cual?? Raúl.
on 2009-06-16 18:48
on 2009-06-16 19:06
explica un poco mas tu problema muestranos un poco de tu codigo para que podamos ayudarte. ayudanos a ayudarte El 16 de junio de 2009 11:48, Raul Martinez < ruby-forum-incoming@andreas-s.net> escribió:
on 2009-06-16 19:28
2009/6/16 Raul Martinez <ruby-forum-incoming@andreas-s.net>:
> Raúl.
Hola
Raúl,
Explica por favor un poco más el problema porque me temo que te has
saltado algún detalle, en principio Ruby funciona como esperas:
$ irb
irb(main):001:0> def empty
irb(main):002:1> ""
irb(main):003:1> end
=> nil
irb(main):004:0> empty
=> ""
irb(main):005:0> empty.class
=> String
Un saludo,
--
Sergio Gil Pérez de la Manga
e-mail > sgilperez@gmail.com
blog > http://www.lacoctelera.com/porras
now > http://twitter.com/porras
on 2009-06-17 13:06
Tengo algo asÃ...
def method2!(params)
result = ""
begin
...
rescue Exception1 => e
result = "Error1"
rescue Exception2 => e
result = "Error2"
ensure
...
result
end
end
def method1
...
result = method2!(params)
respond_to do |format|
if result.empty?
format.html { redirect_to root_url }
else
format.html {
logger.error result
render :action => :new
}
end
end
end
El tema está en que cuando comprobaba el valor de vuelta en
"result.empty?" me cascaba advirtiendome que el metodo no existe en
TrueClass.
No se si se verá más claro...
Raúl.
on 2009-06-17 13:12
On Wed, Jun 17, 2009 at 1:06 PM, Raul Martinez < ruby-forum-incoming@andreas-s.net> wrote: > result = "Error2" > ensure > ... > > result > end > end > Te falta un return en el ensure para forzar que el valor devuelto sea result, me explico: def a true ensure false end def b return true ensure return false end a => true b => false
on 2009-06-17 13:27
El caso es... eso hará que no me transforme la cadena vacia a TrueClass?? Saludos, Raúl.
on 2009-06-18 00:36
On Wed, Jun 17, 2009 at 1:06 PM, Raul Martinez<ruby-forum-incoming@andreas-s.net> wrote: > Â Â ensure > Â Â Â ... > > Â Â Â result > Â Â end > end Eso esta bastante raro. El valor de un begin/rescue si no salta ninguna excepcion es el de la ultima expresion en el begin, o la ultima de la clausula else si esta existe. Si salta una excepcion y se captura en una clausula rescue, el valor del begin/rescue es de la ultima expresion de dicha clausula. Si salta una excepcion y no se captura no hay valor de retorno ya que la expresion se tira para arriba al caller. Como ves, la clausula ensure no pinta nada en cuanto al valor de retorno (si bien tecnicamente se puede usar return ahi). Podria ser que lo que quieras sea una clausula else en lugar de una ensure? Naturalmente siempre puedes devolver result poniendolo al final del metodo, fuera del begin/rescue, pero antes miraria si el ensure esta bien usado.
on 2009-06-18 17:02
Muchas gracias Xavier, Mucho me temo que lo que pasaba es que no entendÃa como funcionaba la captura de las excepciones. Mi idea era que el valor de retorno de la funcion era el de la ejecucion de la ultima sentencia dentro del ensure. He corregido el codigo y ahora ya funciona como esperaba. Los "Poltergeist" y cosas raras mejor para el cine... Gracias de nuevo, Raúl.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.