शुरुआती रूबी प्रश्न में वास्तव में स्थानीय चर का उपयोग कैसे करें। इस कोड को बदलने का सबसे आसान तरीका क्या है, लेकिन ब्लॉक को पूरी तरह बरकरार रखने वाले को छोड़कर, जो साइड इफेक्ट को समाप्त करता है?रूबी प्रो/लैम्ब्डा
$ irb
irb(main):001:0> x = lambda {|v| x=2
irb(main):002:1> v}
=> #<Proc:[email protected](irb):1>
irb(main):003:0> x.call(3)
=> 3
irb(main):004:0> x
=> 2
यह सबसे सरल उदाहरण मैं या "एक्स को प्रोक असाइन नहीं करते" "काम निकालें" मेरी समस्या को वर्णन करने के ईजाद सकता है, इसलिए है कि मैं के लिए क्या देख रहा हूँ नहीं है।
मैं एक प्रो (या लैम्बडा) में स्थानीय चर सेट करना चाहता हूं जिसे मूल संलग्नक क्षेत्र को प्रभावित किए बिना असाइन किया जा सकता है। मैं ब्लॉक को लपेटने के लिए गतिशील रूप से कक्षा या मॉड्यूल बना सकता था, लेकिन ऐसा लगता है कि इस तरह की मूल चीज़ के लिए ओवरकिल लगता है।
मैं क्या कर रहा हूँ के बराबर अजगर:
def x(v):
x = 2 # this is a local variable, what a concept
return v
क्या आपने बाहरी चर के समान नाम का उपयोग नहीं करने का प्रयास किया है? बाहरी क्षेत्र में घोषित होने पर –
'x' एक बंद चर है। क्या आपके पास ऐसी शर्त है जो इन चरों में से किसी एक को नामित करने से रोकती है, जैसे '_x'? आप रूबी भाषा में अन्यथा मौलिक उम्मीद को अक्षम करने की कोशिश कर रहे हैं। – tadman
स्पष्ट रूप से विधियों में स्थानीय चर होना संभव है। क्या यह एकमात्र भाषा निर्माण है जो वीएम में एक नया व्याख्यात्मक गुंजाइश बनाता है? यदि ऐसा है, ऐसा लगता है कि 'Proc' और 'lambda' सस्ते हैं कि इन्हें उचित कार्यात्मक प्रोग्रामिंग करने के लिए उपयोग नहीं किया जा सकता है। – wberry