Sé por diseño que no puede controlar lo que sucede cuando se destruye un objeto. También conozco la definición de algún método de clase como finalizador.RAII en Ruby (O, Cómo administrar recursos en Ruby)
Sin embargo, ¿es la expresión de ruby para RAII de C++ (los recursos se inicializan en constructor, cerrado en destructor)? ¿Cómo administran las personas los recursos utilizados dentro de los objetos incluso cuando ocurren errores o excepciones?
Usando asegurar obras:
f = File.open("testfile")
begin
# .. process
rescue
# .. handle error
ensure
f.close unless f.nil?
end
pero los usuarios de la clase tener que acordarse de hacer toda la chacha cada comenzará-rescate-asegurar el método abierto tiene que ser llamado.
Así, por ejemplo, voy a tener la clase siguiente:
class SomeResource
def initialize(connection_string)
@resource_handle = ...some mojo here...
end
def do_something()
begin
@resource_handle.do_that()
...
rescue
...
ensure
end
def close
@resource_handle.close
end
end
El resource_handle no se cerrará si la excepción es causado por alguna otra clase y el script finaliza.
¿O es el problema más de que sigo haciendo esto también C++ - como?
Mientras esto funciona, tiene que depender de alguien que esté usando su clase para hacer lo correcto. Deben recordar hacer todo el chacha de inicio-rescate-asegurar cada vez que se necesite llamar al método abierto. Estoy editando la pregunta para aclarar esto, pero gracias por la respuesta :) – moogs