Szukaj…


Składnia

  • object.instance_eval „code”
  • object.instance_eval „kod”, „nazwa pliku”
  • object.instance_eval „kod”, „nazwa pliku”, „numer linii”
  • object.instance_eval {code}
  • object.instance_eval {| odbiornik | kod }

Parametry

Parametr Detale
string Zawiera kod źródłowy Ruby do oceny.
filename Nazwa pliku używana do raportowania błędów.
lineno Numer linii używany do raportowania błędów.
block Blok kodu do oceny.
obj Odbiornik jest przekazywany do bloku jako jedyny argument.

Ocena wystąpienia

Metoda instance_eval jest dostępna na wszystkich obiektach. Ocenia kod w kontekście odbiornika:

object = Object.new

object.instance_eval do
  @variable = :value
end

object.instance_variable_get :@variable # => :value

instance_eval ustawia self na object na czas trwania bloku kodu:

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

Odbiornik jest również przekazywany do bloku jako jedyny argument:

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

Metoda instance_exec różni się pod tym względem: zamiast tego przekazuje argumenty do bloku.

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

Wdrażanie z

Wiele języków feature a with stwierdzeniem, że pozwala programistom na pominięcie odbiornika wywołań metod.

with może być łatwo emulowany w Ruby za pomocą instance_eval :

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

Za with metody with można bezproblemowo wykonywać metody na obiektach:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow