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