खोज…


वाक्य - विन्यास

  • object.instance_eval 'कोड'
  • object.instance_eval 'कोड', 'फ़ाइल नाम'
  • object.instance_eval 'कोड', 'फ़ाइल नाम', 'लाइन नंबर'
  • object.instance_eval {कोड}
  • object.instance_eval {| रिसीवर | कोड}

पैरामीटर

पैरामीटर विवरण
string मूल्यांकन किया जाने वाला रूबी स्रोत कोड समाहित करता है।
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 आसानी से उपयोग कर रहा रूबी में नकल करते जा सकती है 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