Ruby - Assicurati che Syslog venga chiuso
Domanda
È assolutamente fondamentale chiudere sempre Syslog quando ho finito di usarlo? C'è un enorme impatto negativo nel non farlo?
Se risulta che devo assolutamente farlo, qual è un buon modo per farlo? Sto aprendo Syslog nel mio costruttore di classi e non vedo un modo per fare i distruttori di classe in Ruby, e attualmente ho qualcosa di simile a questo:
class Foo
def initialize
@@log = Syslog.open("foo")
end
end
Non vedo immediatamente dove dovrebbe essere la chiamata Syslog.close
, ma cosa mi consigliate?
Soluzione
Il metodo open accetta un blocco. Fai qualcosa del genere:
class Foo
def do_something
Syslog.open do
# work with the syslog here
end
end
end
Altri suggerimenti
Sembra che tu lo stia aprendo come una variabile di classe ... quindi il modo corretto sarebbe fare ...
class Foo
def initialize
@@log = Syslog.open("foo")
end
def Foo.finalize(id)
@@log.close if @@log
end
end
Sebbene ciò non sia necessariamente prevedibile o supportato. È il modo per farlo se hai intenzione di mantenere il codice come fai tu.