Ruby Language
instance_eval
Suche…
Syntax
- object.instance_eval 'code'
- object.instance_eval 'code', 'dateiname'
- object.instance_eval 'code', 'dateiname', 'zeilennummer'
- object.instance_eval {code}
- object.instance_eval {| Empfänger | code}
Parameter
Parameter | Einzelheiten |
---|---|
string | Enthält den zu bewertenden Ruby-Quellcode. |
filename | Dateiname für die Fehlerberichterstattung. |
lineno | Zeilennummer für die Fehlerberichterstattung. |
block | Der auszuwertende Codeblock. |
obj | Der Empfänger wird als einziges Argument an den Block übergeben. |
Instanzbewertung
Die Methode instance_eval
ist für alle Objekte verfügbar. Es wertet Code im Kontext des Empfängers aus:
object = Object.new
object.instance_eval do
@variable = :value
end
object.instance_variable_get :@variable # => :value
instance_eval
setzt self
für die Dauer des Codeblocks auf object
:
object.instance_eval { self == object } # => true
Der Empfänger wird auch als einziges Argument an den Block übergeben:
object.instance_eval { |argument| argument == object } # => true
Die instance_exec
Methode unterscheidet sich in dieser Hinsicht: Sie übergibt stattdessen ihre Argumente an den Block.
object.instance_exec :@variable do |name|
instance_variable_get name # => :value
end
Umsetzung mit
In vielen Sprachen gibt es eine with
Anweisung, mit der Programmierer den Empfänger von Methodenaufrufen auslassen können.
with
kann in Ruby mit instance_eval
leicht emuliert werden:
def with(object, &block)
object.instance_eval &block
end
Die with
Methode kann verwendet werden, um Methoden nahtlos an Objekten auszuführen:
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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow