Ruby Language
instance_eval
Поиск…
Синтаксис
- object.instance_eval 'code'
- object.instance_eval 'code', 'filename'
- object.instance_eval 'code', 'filename', 'number number'
- object.instance_eval {code}
- object.instance_eval {| receiver | код}
параметры
параметр | подробности |
---|---|
string | Содержит исходный код Ruby для оценки. |
filename | Имя файла, используемое для сообщений об ошибках. |
lineno | Номер строки, используемой для сообщений об ошибках. |
block | Блок кода для оценки. |
obj | Приемник передается блоку в качестве единственного аргумента. |
Оценка экземпляра
Метод instance_eval
доступен для всех объектов. Он оценивает код в контексте получателя:
object = Object.new
object.instance_eval do
@variable = :value
end
object.instance_variable_get :@variable # => :value
instance_eval
устанавливает self
для object
в течение всего блока кода:
object.instance_eval { self == object } # => true
Приемник также передается блоку в качестве единственного аргумента:
object.instance_eval { |argument| argument == object } # => true
Метод instance_exec
отличается в этом отношении: вместо этого он передает свои аргументы блоку.
object.instance_exec :@variable do |name|
instance_variable_get name # => :value
end
Выполнение
Многие языки оснащены with
утверждением , что позволяет программистам опускать приемник вызовов методов.
with
может легко эмулироваться в Ruby с помощью instance_eval
:
def with(object, &block)
object.instance_eval &block
end
Метод with
может использоваться для бесшовного выполнения методов на объектах:
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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow