ExpertiDict

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

instance eval

/ˈɪnstəns ɪˈvæl/método

Executa um bloco com o self trocado para o objeto, dando acesso às suas variáveis de instância e métodos privados. É a base de muitos DSLs em Ruby.

Onde usar

É como DSLs de configuração permitem escrever só o nome do método dentro de um bloco, sem receptor. No code review, avalie se vale abrir mão da clareza do self.

Em código

class Cofre
  def initialize; @senha = 1234; end
end
c = Cofre.new
p c.instance_eval { @senha }  # => 1234

Exemplos

The DSL runs your block with instance_eval.

O DSL roda o seu bloco com instance_eval.

I used instance_eval in the test to read a private variable.

Usei instance_eval no teste para ler uma variável privada.

Cuidado

Quebra o encapsulamento ao ler @variáveis privadas, e dentro do bloco o self deixa de ser o do chamador, então os métodos dele ficam fora de alcance.

Veja também

Todos os termos de Ruby