Ruby Language
instance_eval
Sök…
Syntax
- object.instance_eval 'kod'
- object.instance_eval 'kod', 'filnamn'
- object.instance_eval 'kod', 'filnamn', 'radnummer'
- object.instance_eval {code}
- object.instance_eval {| mottagare | kod}
parametrar
Parameter | detaljer |
---|---|
string | Innehåller Ruby-källkoden som ska utvärderas. |
filename | Filnamn som ska användas för felrapportering. |
lineno | Radnummer som ska användas för felrapportering. |
block | Kodblocket som ska utvärderas. |
obj | Mottagaren överförs till blocket som dess enda argument. |
Instansutvärdering
Metoden instance_eval
är tillgänglig på alla objekt. Den utvärderar koden i samband med mottagaren:
object = Object.new
object.instance_eval do
@variable = :value
end
object.instance_variable_get :@variable # => :value
instance_eval
ställer in mig self
som object
under kodblocket:
object.instance_eval { self == object } # => true
Mottagaren överförs också till blocket som dess enda argument:
object.instance_eval { |argument| argument == object } # => true
Metoden instance_exec
skiljer sig i detta avseende: den överför sina argument till blocket istället.
object.instance_exec :@variable do |name|
instance_variable_get name # => :value
end
Genomförande med
Många språk har ett with
uttalande som gör det möjligt för programmerare att utelämna mottagaren av metodsamtal.
with
kan enkelt emuleras i Ruby med instance_eval
:
def with(object, &block)
object.instance_eval &block
end
Den with
metoden kan användas för att smidigt köra metoder på objekt:
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow