2010-03-27 3 views
18

में एक अन्य वैरिएबल नाम के रूप में एक चर के मान का उपयोग करके मैं रूबी सीखने में शुरुआत कर रहा हूं और मैंने एक प्रोग्राम लिखा है जो कुछ संख्याएं उत्पन्न करता है और उन्हें @one, @two, @three आदि को चर के रूप में असाइन करता है। उपयोगकर्ता इसके नाम को इनपुट करके बदलकर एक चर निर्दिष्ट कर सकता है (उदाहरण के लिए एक)। मुझे फिर कुछ @ @ [valueofinout] = asd 'करने की ज़रूरत है। मैं यह कैसे करूँगा, और क्या एक बेहतर तरीका है जिस तरह से मैं सोच रहा हूं निराश होना प्रतीत होता है? मुझेरूबी

x = "myvar" 
myvar = "hi" 
eval(x) -> "hi" 

लेकिन मुझे पूरी तरह से समझ में नहीं आता कि दूसरी पंक्ति की आवश्यकता क्यों है। मेरे मामले में मैं

@one = "21" 
input = "one" 
input = "@" + input 
changeto = "22" 
eval(input) -> changeto 

उत्तर

28

उपयोग instance_variable_set (rubydoc)

instance_variable_set("@" + varname, value) 

हालांकि अधिकांश मामलों में, आप चर अपने उपयोगकर्ता के साथ बातचीत कर रहा है से अपने सामान्य रूबी चर बांट देना चाहिए। उपयोगकर्ता चर के हैश बनाने के बारे में, उदा।

@uservars = { 'one' => 1, 'two' => 2 } 
two = @uservars['two'] # Look up 'two' variable 

varname = "myvar" 
@uservars[varname] = 5 # Set a variable by name 
value = @uservars[varname] # Get a variable by name 
+1

वाह, यह वास्तव में एक ऐसा क्षेत्र है जहां PHP वाक्यविन्यास की सफाई के मामले में रूबी को आउटहाइन करता है। http://stackoverflow.com/a/4169891/2951835 – ahnbizcad

+0

रुबी इसे करना मुश्किल बनाता है क्योंकि यह बदसूरत है, आपको शायद ही कभी एक उदाहरण के उपयोगकर्ता निर्दिष्ट चर सेट करने की आवश्यकता है जब तक आप मेटाप्रोग्रामिंग नहीं कर लेते। वैश्विक चर के साथ गतिशील रूप से गड़बड़ करना एक सुरक्षा छेद है; यदि आप उपयोगकर्ता द्वारा परिभाषित चर के सेट चाहते हैं तो शायद आप हैश चाहते हैं। – rjh

2

उदाहरण चर इस पद्धति के माध्यम से प्राप्त किया जा सकता है की तरह कुछ का प्रयोग करेंगे:

input = instance_variable_get("@one") 

इस के बाद, आपके मामले में आप input बराबर करने के लिए "21" होगा।

+0

हाय, मैं बिल्कुल नहीं हूं कि मुझे जो चाहिए वह काम करेगा। मुझे ऐसा कुछ करने की आवश्यकता होगी जो एक चर के लिए एक निश्चित संख्या असाइन करे (चर ए कहें) लेकिन परिवर्तनीय ए का नाम ज्ञात नहीं है। परिवर्तनीय ए का नाम परिवर्तनीय बी के भीतर संग्रहीत किया गया है, हालांकि मुझे वैरिएबल बी के लिए कुछ निर्दिष्ट करने के लिए चर बी के मान का उपयोग करना होगा। AFAICT यह example_variable_get के साथ नहीं किया जा सकता है। – hrickards

+0

@hrickards: क्या आप ए के संभावित मूल्यों को जानते हैं? यदि आप करते हैं तो एक और तरीका है। लेकिन intance_variable_get आपको जो चाहिए वो करना चाहिए! –

+0

@ निकलास 1 और 4 9 – hrickards