ExpertiDict

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

class eval

/klæs ˈivæl/método

Método de Module que executa um bloco ou string no contexto da classe, como se você estivesse dentro do corpo dela. Permite reabrir classes e definir métodos dinamicamente.

Onde usar

Aparece em metaprogramação, bibliotecas e DSLs que precisam reabrir uma classe recebida como argumento. Prefira a forma com bloco, mais segura que a com string.

Em código

class Cachorro; end
Cachorro.class_eval do
  def latir = "au"
end
p Cachorro.new.latir  # => "au"
p Cachorro.instance_methods(false)
# => [:latir]

Exemplos

The gem reopens your class with class_eval.

A gem reabre sua classe com class_eval.

Prefer the block form of class_eval over strings.

Prefira a forma com bloco do class_eval em vez de strings.

Cuidado

Não confunda com instance_eval: no class_eval, def cria métodos de instância; no instance_eval, def cria métodos singleton do receptor.

Sinônimos

module_eval

Veja também

Todos os termos de Ruby