ExpertiDict

Ruby · Avançado · Inglês · Técnico

define finalizer

/dɪˈfaɪn ˈfaɪnəlaɪzɚ/método

ObjectSpace.define_finalizer registra um proc para ser chamado depois que o objeto é coletado pelo GC. O proc não pode referenciar o próprio objeto, ou ele nunca será liberado.

Onde usar

Aparece para liberar recursos nativos, como handles de C, quando não há close explícito. Não se sabe quando roda; no pior caso, roda só quando o programa termina.

Em código

class Recurso
  def self.fin(id) = proc { puts "fim #{id}" }
  def initialize(id)
    ObjectSpace.define_finalizer(
      self, self.class.fin(id))
  end
end
Recurso.new(7)  # ao sair: fim 7

Exemplos

Don't reference self inside the finalizer proc.

Não referencie self dentro do proc do finalizer.

The finalizer ran when the process exited.

O finalizer rodou quando o processo terminou.

Cuidado

Não dependa de finalizers para lógica de negócio: o momento é imprevisível. Prefira ensure e blocos de recurso.

Sinônimos

finalizador

Veja também

Todos os termos de Ruby