Ruby Language
instance_eval
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