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