Disons que j'ai une classe logger qui a un attribut pointant vers un fichier ouvert. Ce fichier devrait être ouvert jusqu'à ce que cette classe ne soit plus utilisée. Quelque chose comme:Meilleures pratiques pour libérer des objets dans ruby
class MyLogger
attr_accessor :log_file
def initialize
@log_file = File.new('my_log_file_name.log','w')
end
def finalize(id)
@log_file.close
end
end
Comment puis-je m'assurer que lorsque je n'utiliserai plus cette instance, le gestionnaire de fichiers sera fermé? Ive a essayé cela, mais sans effet:
l = MyLogger.new
l = nil
ObjectSpace.garbage_collect
Après cela, si je tente de supprimer le fichier, il renvoie une erreur indiquant que le fichier est utilisé.
Vous pourriez avoir une méthode comme 'File.open', qui prend un bloc et gère l'ouverture et la fermeture de la poignée de fichier pour vous. – Chuck