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