ExpertiDict

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

instance exec

/ˈɪnstəns ɪɡˈzɛk/método

Método de BasicObject que executa um bloco com self trocado para o objeto, como instance_eval, mas permite passar argumentos ao bloco. Muito usado para montar DSLs.

Onde usar

Aparece em DSLs e em frameworks que executam lambdas no contexto de um objeto, como callbacks e escopos. Mantém o acesso às variáveis locais do bloco.

Em código

class Pedido
  def initialize; @total = 100; end
end
bloco = proc { |desc| @total - desc }
pedido = Pedido.new
p pedido.instance_exec(10, &bloco)  # => 90

Exemplos

The DSL runs your block with instance_exec.

A DSL roda seu bloco com instance_exec.

Unlike instance_eval, instance_exec passes arguments in.

Ao contrário do instance_eval, o instance_exec repassa argumentos.

Cuidado

Só o self muda; as variáveis locais continuam as do bloco. Não o use para quebrar o encapsulamento sem necessidade.

Veja também

Todos os termos de Ruby