2010-02-21 15 views
5

मैं नीचे दिए गए कोड को कैसे बना सकता हूं, ताकि puts दोनों 1 प्रदर्शित कर सकें?रूबी में वेरिएबल नाम के रूप में एक चर का उपयोग कैसे कर सकता हूं?

video = [] 
name = "video" 

name[0] = 1 

puts name[0] #gives me 1 
puts video[0] #gives me nil 
+0

यदि आपको वास्तव में करना है, तो 'eval() 'का उपयोग करें। Http://stackoverflow.com/questions/2168666/is-it-possible-to-do- गतिशील- variables-in-ruby – molf

उत्तर

7

आप इसे eval का उपयोग कर काम कर सकते हैं:

eval "#{name}[0] = 1" 

मैं दृढ़ता से है कि हालांकि खिलाफ सलाह। ज्यादातर परिस्थितियों में जहां आपको लगता है कि आपको ऐसा कुछ करने की ज़रूरत है, तो आपको प्रोबबी को हैशपैप का उपयोग करना चाहिए। पसंद:

context = { "video" => [] } 
name = "video" 
context[name][0] = 1 
+0

@ sepp2k का उत्तर देखें: आप eval का उपयोग करने के खिलाफ दृढ़ता से क्यों हैं? – Radek

+3

@ रैडेक: मम्प्स जैसे टूटे हुए सिस्टम के साथ 3000 वर्षों का अनुभव; यह एक क्लासिक कोड गंध है, और यह आपके कोड को समझने और बनाए रखने के लिए कठिन बना देगा। –

+3

@ रैडेक: एक बात के लिए, यदि आप उपयोगकर्ता इनपुट को eval करते हैं तो यह एक प्रमुख सुरक्षा छेद है। एक और हैशैप्स के लिए परिवर्तनीय नामों से मूल्यों के मानचित्रण के लिए बस अधिक अनुकूल है। अभी तक एक और, कोड जो eval का उपयोग करता है डीबग करने के लिए एक दर्द हो सकता है। – sepp2k

3

यहां eval function।

video = [] #there is now a video called array 
name = "video" #there is now a string called name that evaluates to "video" 
puts eval(name) #prints the empty array video 
name[0] = 1 #changes the first char to value 1 (only in 1.8.7, not valid in 1.9.1) 

यहां eval() doc है।

2

इससे पहले कि आप eval सुझावों को देखें, कृपया, कृपया, इन कृपया पढ़ें:

(हाँ, उन में पर्ल के बारे में कर रहे हैं उनके विनिर्देश। भाषा के बावजूद बड़ा बिंदु धारण करता है, मुझे लगता है।)

संबंधित मुद्दे

 संबंधित मुद्दे