Suche…


Syntax

  • object.instance_eval 'code'
  • object.instance_eval 'code', 'dateiname'
  • object.instance_eval 'code', 'dateiname', 'zeilennummer'
  • object.instance_eval {code}
  • object.instance_eval {| Empfänger | code}

Parameter

Parameter Einzelheiten
string Enthält den zu bewertenden Ruby-Quellcode.
filename Dateiname für die Fehlerberichterstattung.
lineno Zeilennummer für die Fehlerberichterstattung.
block Der auszuwertende Codeblock.
obj Der Empfänger wird als einziges Argument an den Block übergeben.

Instanzbewertung

Die Methode instance_eval ist für alle Objekte verfügbar. Es wertet Code im Kontext des Empfängers aus:

object = Object.new

object.instance_eval do
  @variable = :value
end

object.instance_variable_get :@variable # => :value

instance_eval setzt self für die Dauer des Codeblocks auf object :

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

Der Empfänger wird auch als einziges Argument an den Block übergeben:

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

Die instance_exec Methode unterscheidet sich in dieser Hinsicht: Sie übergibt stattdessen ihre Argumente an den Block.

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

Umsetzung mit

In vielen Sprachen gibt es eine with Anweisung, mit der Programmierer den Empfänger von Methodenaufrufen auslassen können.

with kann in Ruby mit instance_eval leicht emuliert werden:

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

Die with Methode kann verwendet werden, um Methoden nahtlos an Objekten auszuführen:

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow