Ruby Language
instancia_eval
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