Ruby · Avançado · Inglês · Técnico
instance eval
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 } # => 1234Exemplos
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.