जहां तक मैं समझता हूं, टीसीएल में यदि आप किसी फ़ंक्शन में नामित सरणी पास करना चाहते हैं, तो आपको कॉलर के ऊपरी दायरे को upvar
कमांड बॉली के भीतर कमांड तक पहुंचना होगा। क्या यह टीसीएल में सरणी पास करने का एकमात्र तरीका है?टीसीएल में कार्यों के लिए गुजरने वाले सरणी। केवल ऊपर उठाओ?
5
A
उत्तर
5
other ways हैं, जैसे इसे पहले सूची में परिवर्तित करना (array get
और array set
के माध्यम से)।
9
जैसा कि माइकल ने इंगित किया है, कई तरीके हैं, साथ ही एक विकी पेज जो इसकी चर्चा करता है। बस यहां उसकी कुछ जानकारी के लिए, कुछ विकल्प हैं:
तक Upvar
proc by_upvar {&arrName} {
upvar 1 ${&arrName} arr
puts arr(mykey)
set arr(myotherkey) 2
}
set myarr(mykey) 1
by_upvar myarr
info exists myarr(myotherkey) => true
- परिणाम सरणी में परिवर्तन में फोन करने वाले
सरणी से ही देख रहे हैं प्राप्त करें/सेट करें
proc by_getset {agv} {
array set arr $agv
puts arr(mykey)
set arr(myotherkey) 2
return [array get arr]
}
set myarr(mykey) 1
array set mynewarr [by_upvar myarr]
info exists myarr(myotherkey) => false
info exists mynewarr(myotherkey) => true
- परिणाम सरणी में परिवर्तन में फोन करने वाले
- ही एक तंत्र आप केवल सरणी के मूल्य, आप कर सकते थे में गुजर रहे हैं एक सरणी
2
वापस जाने के लिए इस्तेमाल किया जा सकता द्वारा देखा जा रहा है इसके बजाए एक शब्दकोश में पास करें (संकेत: array get
एक सरणी को एक शब्दकोश मान में क्रमबद्ध करता है) और इसमें dict
कमांड का उपयोग करने के लिए कमांड का उपयोग करें। लेकिन यदि आप लाइव वैल्यू तक पहुंच चाहते हैं, तो upvar
निश्चित रूप से सबसे आसान है। यह भी एक बहुत तेज तकनीक है; यह upvar
के बाद परिवर्तनीय पहुंच के दौरान एक सूचक के अतिरिक्त ट्रैवर्सल को संकलित करता है।
संबंधित मुद्दे
- 1. node.js गुजरने वाले चर
- 2. Knockout.js - गुजरने वाले पैरामीटर
- 3. PHP में गुजरने वाले पैरामीटर में
- 4. प्रमाणीकरण स्थिति गुजरने वाले node.js
- 5. जावा पैरामीटर गुजरने वाले प्रश्न
- 6. गुजरने वाले पैरामीटर: उद्देश्य जावास्क्रिप्ट
- 7. कंस्ट्रक्टर मूल्यों में गुजरने वाले निन
- 8. थ्रेड बनाएं - गुजरने वाले तर्क
- 9. jquery: होवर() फ़ंक्शन में गुजरने वाले चर?
- 10. एक्सएसएल: टेम्पलेट्स के बीच गुजरने वाले चर
- 11. टीसीएल में एक सरणी कैसे शुरू करें?
- 12. लूप-गुजरने वाले पैरामीटर के लिए जावास्क्रिप्ट एकाधिक गतिशील addEventListener
- 13. टीसीएल
- 14. सी # - कन्स्ट्रक्टर के संदर्भ में गुजरने वाले पैरामीटर, विधि
- 15. एरे पर काम करने वाले कार्यों के लिए एपीआई डिज़ाइन
- 16. zend_form व्यूस्क्रिप्ट सजावट/गुजरने वाले तर्क
- 17. केवल रेक कार्यों के लिए प्रारंभिक चलाएं
- 18. टीसीएल
- 19. टीसीएल
- 20. फ़ायरफ़ॉक्स एक्सटेंशन में गुजरने वाले संदेश को कैसे कार्यान्वित करें?
- 21. कम और गुजरने वाले चर में स्ट्रिंग से बचने
- 22. सी # में गुजरने वाले ऐरे पैरामीटर: संदर्भ के आधार पर यह स्पष्ट रूप से क्यों है?
- 23. पायथन - गुजरने वाले मूल्य कैसे काम करते हैं?
- 24. डब्ल्यूपीएफ-विंडो केवल अपने आवेदन के लिए सबसे ऊपर?
- 25. खिड़की वाले कुल कार्यों के लिए तार्किक रीड क्यों हैं?
- 26. वैरिएबल तर्क संख्या वाले कार्यों के लिए टाइपस्क्रिप्ट प्रकार हस्ताक्षर
- 27. प्रमाणीकरण की आवश्यकता वाले कार्यों के लिए डिवाइज़ एक्शन फ़िल्टर
- 28. एमवीसी रेजर छिपी हुई इनपुट और गुजरने वाले मूल्य
- 29. टीसीएल/उदाहरण उदाहरण?
- 30. एक पैराम विधि के लिए नल गुजरने का परिणाम नल पैरामीटर सरणी में क्यों होता है?
आपके by_upvar proc में एम्परेंड के साथ क्या हो रहा है? टीसीएल वाक्यविन्यास नहीं है। –
@glenn जैकमैन: "टीसीएल वाक्यविन्यास नहीं"? बकवास! सब कुछ टीसीएल वाक्यविन्यास है :-)। चूंकि परिवर्तनीय नाम किसी भी स्ट्रिंग हो सकते हैं और किसी अन्य भाषा में एक चर के पते को इंगित करने के लिए उपयोग किया जाता है, यह एक उदार अर्ध-अर्ध-स्वयं-दस्तावेज तरीका बनाता है जो इसे उपर के लक्ष्य के रूप में अस्वीकार कर देता है। मजेदार कैसे ओह-इतने सालों के बाद मैंने कभी सोचा नहीं था; मैं आमतौर पर _ या fooVar (upvar $ fooVar foo) का उपयोग करता हूं। –
ठीक है, सच है। मैं आमतौर पर "वर्नाम" का उपयोग करता हूं। हालांकि upvar कमांड में एक त्रुटि है: त्रुटि '(ए -> $ {& a}) के लिए खाते में अपडेट किया गया 'upvar 1 $ और arrName arr' –