Ruby - Stellen Sie sicher, dass Syslog geschlossen wird
Frage
Ist es absolut kritisch, dass ich Syslog immer schließe, wenn ich damit fertig bin? Gibt es einen enormen negativen Einfluss davon, wenn Sie dies nicht tun?
Wenn sich herausstellt, dass ich definitiv brauche, was ist ein guter Weg, dies zu tun? Ich öffne Syslog in meinem Klassenkonstruktor und sehe keinen Weg, Klassenzerstörer in Ruby zu machen, und habe derzeit etwas, das dem ähnelt:
class Foo
def initialize
@@log = Syslog.open("foo")
end
end
Ich sehe nicht sofort den Ort, an dem die Syslog.close
Anruf sollte sein, aber was empfehlen Sie?
Lösung
Die offene Methode akzeptiert einen Block. So etwas tun:
class Foo
def do_something
Syslog.open do
# work with the syslog here
end
end
end
Andere Tipps
Es sieht so aus, als würden Sie es als Klassenvariable öffnen ... also wäre der richtige Weg ...
class Foo
def initialize
@@log = Syslog.open("foo")
end
def Foo.finalize(id)
@@log.close if @@log
end
end
Dies ist zwar nicht notwendigerweise vorhersehbar oder unterstützt. Es ist der Weg, es zu tun, wenn Sie den Code so halten möchten, wie Sie es tun.