Zoeken…


Syntaxis

  • object.instance_eval 'code'
  • object.instance_eval 'code', 'bestandsnaam'
  • object.instance_eval 'code', 'bestandsnaam', 'regelnummer'
  • object.instance_eval {code}
  • object.instance_eval {| ontvanger | code}

parameters

Parameter Details
string Bevat de Ruby-broncode die moet worden geëvalueerd.
filename Bestandsnaam om te gebruiken voor foutrapportage.
lineno Regelnummer dat moet worden gebruikt voor foutrapportage.
block Het te coderen blok.
obj De ontvanger wordt als het enige argument doorgegeven aan het blok.

Exemplaarevaluatie

De methode instance_eval is beschikbaar op alle objecten. Het evalueert code in de context van de ontvanger:

object = Object.new

object.instance_eval do
  @variable = :value
end

object.instance_variable_get :@variable # => :value

instance_eval stelt self om object te object voor de duur van het codeblok:

object.instance_eval { self == object } # => true

De ontvanger wordt ook doorgegeven aan het blok als het enige argument:

object.instance_eval { |argument| argument == object } # => true

De methode instance_exec verschilt in dit opzicht: in plaats daarvan worden de argumenten doorgegeven aan het blok.

object.instance_exec :@variable do |name|
  instance_variable_get name # => :value
end

Implementeren met

Veel talen hebben een with statement waarmee programmeurs de ontvanger van methodeaanroepen kunnen weglaten.

with kan eenvoudig worden geëmuleerd in Ruby met instance_eval :

def with(object, &block)
  object.instance_eval &block
end

De with werkwijze kan worden toegepast op werkwijzen naadloos voeren op objecten:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow