Buscar..


Sintaxis

  • object.instance_eval 'código'
  • object.instance_eval 'código', 'nombre de archivo'
  • object.instance_eval 'código', 'nombre de archivo', 'número de línea'
  • object.instance_eval {code}
  • object.instance_eval {| receiver | código}

Parámetros

Parámetro Detalles
string Contiene el código fuente de Ruby para ser evaluado.
filename Nombre de archivo a usar para reportar errores.
lineno Número de línea a utilizar para la notificación de errores.
block El bloque de código a evaluar.
obj El receptor se pasa al bloque como su único argumento.

Evaluación de instancias

El método instance_eval está disponible en todos los objetos. Evalúa el código en el contexto del receptor:

object = Object.new

object.instance_eval do
  @variable = :value
end

object.instance_variable_get :@variable # => :value

instance_eval establece self para object durante la duración del bloque de código:

object.instance_eval { self == object } # => true

El receptor también se pasa al bloque como su único argumento:

object.instance_eval { |argument| argument == object } # => true

El método instance_exec difiere a este respecto: en su lugar, pasa sus argumentos al bloque.

object.instance_exec :@variable do |name|
  instance_variable_get name # => :value
end

Implementando con

Muchos lenguajes cuentan with una declaración with que los programadores pueden omitir el receptor de llamadas a métodos.

with puede ser fácilmente emulado en Ruby usando instance_eval :

def with(object, &block)
  object.instance_eval &block
end

El método with se puede usar para ejecutar métodos sin problemas en objetos:

hash = Hash.new

with hash do
  store :key, :value
  has_key? :key       # => true
  values              # => [:value]
end


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow