2008-09-21 6 views
1

Est-il absolument essentiel que je ferme toujours Syslog quand j'ai fini de l'utiliser? Y a-t-il un impact négatif énorme de ne pas le faire?Ruby - Assurez-vous que Syslog est fermé

S'il s'avère que j'en ai vraiment besoin, quelle est la meilleure façon de le faire? J'ouvre Syslog dans mon constructeur de la classe et je ne vois pas une façon de faire la classe en Destructeurs Ruby, et actuellement quelque chose qui ressemble à ceci:

class Foo 
    def initialize 
    @@log = Syslog.open("foo") 
    end 
end 

Je ne vois pas immédiatement le lieu où l'appel Syslog.close devrait être, mais que recommandez-vous?

Répondre

2

La méthode ouverte accepte un bloc. Faites quelque chose comme ceci:

class Foo 
    def do_something 
    Syslog.open do 
     # work with the syslog here 
    end 
    end 
end 
+0

L'appel de la méthode 'do_something' serait-il alors beaucoup plus coûteux que d'ouvrir une fois syslog, en l'utilisant autant que nécessaire, et en le fermant? –

1

On dirait que vous ouvrez comme une variable de classe ... alors la bonne façon serait de faire ...

class Foo 
    def initialize 
    @@log = Syslog.open("foo") 
    end 

    def Foo.finalize(id) 
    @@log.close if @@log 
    end 
end 

Bien que ce n'est pas necesssarily prévisible ou soutenu. C'est la façon de le faire si vous voulez garder le code comme vous le faites.

Questions connexes