Ruby Language
instance_eval
Recherche…
Syntaxe
- object.instance_eval 'code'
- object.instance_eval 'code', 'nomfichier'
- object.instance_eval 'code', 'nomfichier', 'numéro de ligne'
- object.instance_eval {code}
- object.instance_eval {| récepteur | code}
Paramètres
| Paramètre | Détails |
|---|---|
string | Contient le code source Ruby à évaluer. |
filename | Nom du fichier à utiliser pour le rapport d'erreur. |
lineno | Numéro de ligne à utiliser pour le rapport d'erreur. |
block | Le bloc de code à évaluer. |
obj | Le récepteur est transmis au bloc comme seul argument. |
Évaluation d'instance
La méthode instance_eval est disponible sur tous les objets. Il évalue le code dans le contexte du récepteur:
object = Object.new
object.instance_eval do
@variable = :value
end
object.instance_variable_get :@variable # => :value
instance_eval définit lui- self object pour la durée du bloc de code:
object.instance_eval { self == object } # => true
Le récepteur est également transmis au bloc comme seul argument:
object.instance_eval { |argument| argument == object } # => true
La méthode instance_exec diffère à cet égard: elle transmet ses arguments au bloc à la place.
object.instance_exec :@variable do |name|
instance_variable_get name # => :value
end
Mise en œuvre avec
De nombreux langages disposent d'une instruction with qui permet aux programmeurs d'omettre le récepteur d'appels de méthode.
with peut être facilement émulé dans Ruby en utilisant instance_eval :
def with(object, &block)
object.instance_eval &block
end
La méthode with peut être utilisée pour exécuter de manière transparente des méthodes sur des objets:
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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow