Estoy ejecutando ruby 1.9.2p180 (2011-02-18 revisión 30909) [x86_64-linux].en ruby, ¿por qué no está definido? trabajo como uno esperaría cuando se utiliza con asegurar
#!/usr/bin/env ruby
def ouch()
raise ArgumentError, "woof"
fred = 3
return(nil)
ensure
if (defined?(fred)) then
printf("fred is defined (%s)\n", fred.inspect())
else
printf("fred is not defined\n")
end
end # ouch()
ouch()
Cuando se ejecuta, la salida del script rubí anterior es bastante inesperado.
$ ./ouch.rb
fred is defined (nil)
./ouch.rb:4:in `ouch': woof (ArgumentError)
from ./ouch.rb:22:in `<main>'
Así se produce el aumento/excepción, Fred no está recibiendo establece en 3, pero cada vez es más definido y ajustado a cero, anulando la comprobación de definido?(). Esto es muy confuso ¿Es esto un error? Obviamente, la prueba para la definición debe ser seguida por la prueba de nula.
Si esto no es un error, ¿alguien puede explicar por qué no?
las variables de Ruby se definen a partir de la línea de código fuente que se les asigna en primer lugar. No puede usarlos antes de que sean asignados. Por lo tanto, no están "definidos" en la parte superior del bloque en el que se usan ". –
@RobertKlemme Excelente punto, fijo. – whitequark