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