Ruby Language
instance_eval
Ricerca…
Sintassi
- object.instance_eval 'code'
- object.instance_eval 'code', 'filename'
- object.instance_eval 'code', 'filename', 'numero di riga'
- object.instance_eval {code}
- object.instance_eval {| receiver | codice }
Parametri
Parametro | Dettagli |
---|---|
string | Contiene il codice sorgente di Ruby da valutare. |
filename | Nome del file da utilizzare per la segnalazione degli errori. |
lineno | Numero di riga da utilizzare per la segnalazione degli errori. |
block | Il blocco di codice da valutare. |
obj | Il ricevitore viene passato al blocco come unico argomento. |
Valutazione delle istanze
Il metodo instance_eval
è disponibile su tutti gli oggetti. Valuta il codice nel contesto del destinatario:
object = Object.new
object.instance_eval do
@variable = :value
end
object.instance_variable_get :@variable # => :value
instance_eval
imposta self
per object
per la durata del blocco di codice:
object.instance_eval { self == object } # => true
Il destinatario viene anche passato al blocco come unico argomento:
object.instance_eval { |argument| argument == object } # => true
Il metodo instance_exec
differisce in questo senso: passa invece i suoi argomenti al blocco.
object.instance_exec :@variable do |name|
instance_variable_get name # => :value
end
Implementazione con
Molte lingue sono dotate di with
dichiarazione che consente ai programmatori di omettere il ricevitore di chiamate di metodo.
with
può essere facilmente emulato in Ruby usando instance_eval
:
def with(object, &block)
object.instance_eval &block
end
Il metodo with
può essere utilizzato per eseguire senza problemi metodi sugli oggetti:
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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow