खोज…
वाक्य - विन्यास
- varName सेट करें ? मूल्य?
- परेशान? -नोकोम्प्लैन ? ? -? ? varName varName varName ?
- $ varName डालता है
- [सेट varName ] डालता है
- परिवर्तनशील नाम
- वैश्विक नाम varName varName ?
टिप्पणियों
वैरिएबल को मान निर्दिष्ट करना
Tcl में मान निर्दिष्ट करने के लिए कमांड set का उपयोग किया जाता है। जब इसे निम्नलिखित तरीके से दो तर्कों के साथ बुलाया जाता है,
% set tempVar "This is a string."
This is a string.
यह दूसरे तर्क ("यह एक स्ट्रिंग है।") को पहले तर्क (tempVar) द्वारा संदर्भित मेमोरी स्पेस में रखता है। set हमेशा पहले तर्क में नामित चर की सामग्री देता है। उपरोक्त उदाहरण में, set लौटेगा "यह एक स्ट्रिंग है।" बिना उद्धरण।
- यदि मान निर्दिष्ट किया गया है, तो चर varName की सामग्री मान के बराबर सेट की जाती है।
- यदि varName में केवल अल्फ़ान्यूमेरिक वर्ण और कोई कोष्ठक नहीं हैं, तो यह एक स्केलर वैरिएबल है।
- यदि varName का रूप varName (index) है , तो यह एक सहयोगी सरणी का सदस्य है।
ध्यान दें कि चर का नाम लैटिन वर्णमाला तक ही सीमित नहीं है, इसमें यूनिकोड वर्णों का कोई संयोजन शामिल हो सकता है (उदाहरण
% set տուն house
house
% puts ${տուն}
house
scoping
set alpha 1
proc myproc {} {
puts $alpha
}
myproc
यह कोड काम नहीं करता है क्योंकि दो अल्फा अलग-अलग स्कोप में हैं।
कमांड set alpha 1 वैश्विक दायरे में एक चर बनाता है (जो इसे वैश्विक चर बनाता है)।
कमांड puts $alpha को एक दायरे में निष्पादित किया जाता है जो तब बनाया जाता है जब कमांड myproc निष्पादित करता है।
दो स्कोप अलग-अलग हैं। इसका मतलब यह है कि जब puts $alpha नाम alpha को देखने की कोशिश करता है, तो उसे ऐसा कोई चर नहीं मिलता है।
हालांकि, हम इसे ठीक कर सकते हैं:
proc myproc {} {
global alpha beta
puts $alpha
}
इस मामले में, दो वैश्विक चर, alpha और beta , प्रक्रिया के दायरे में उर्फ चर (उसी नाम के साथ) से जुड़े हैं। अन्य चर से पढ़ना वैश्विक चर में मूल्य को पुनः प्राप्त करता है, और उन्हें लिखने से ग्लोबल्स में मूल्यों में परिवर्तन होता है।
आम तौर पर, upvar कमांड पिछले upvar से किसी भी प्रकार के वेरिएबल्स के लिए उपनाम बनाता है। इसका उपयोग वैश्विक क्षेत्र ( #0 ) के साथ किया जा सकता है:
proc myproc {} {
upvar #0 alpha alpha beta b
puts $alpha
}
उपनामों को वैसा ही नाम दिया जा सकता है जैसा कि चर ( alpha ) या किसी अन्य नाम ( beta / b ) से जुड़ा हुआ है।
अगर हम वैश्विक दायरे से myproc कहते हैं, तो यह संस्करण भी काम करता है:
proc myproc {} {
upvar 1 alpha alpha beta b
puts $alpha
}
स्कोप नंबर 1 अर्थ है "पिछला स्कोप" या "कॉलर का स्कोप"।
जब तक आप वास्तव में नहीं जानते हैं कि आप क्या कर रहे हैं, #0 , 0 , और 1 एकमात्र स्कोप हैं जो upvar साथ उपयोग करने के लिए समझ में upvar । ( upvar 0 एक स्थानीय चर के लिए एक स्थानीय उपनाम बनाता है, सख्ती से upvar 0 ऑपरेशन नहीं।)
कुछ अन्य भाषाएँ घुंघराले ब्रेसिज़ द्वारा गुंजाइश को परिभाषित करती हैं, और प्रत्येक दायरे में चलने वाले कोड को सभी नामों को आसपास के स्कोप में देखते हैं। Tcl में एक एकल स्कोप तब बनाया जाता है जब एक प्रक्रिया कहलाती है, और केवल उसके स्वयं के नाम दिखाई देते हैं। यदि कोई प्रक्रिया किसी अन्य प्रक्रिया को कॉल करती है, तो इसका दायरा पिछले स्कोप के शीर्ष पर ढेर हो जाता है, और इसी तरह। इसका मतलब यह है कि सी-शैली की भाषाओं के विपरीत, जिसमें केवल वैश्विक गुंजाइश और स्थानीय गुंजाइश (सबकोप्स के साथ) है, प्रत्येक गुंजाइश किसी भी दायरे को खोलने के लिए एक एन्कोडिंग (हालांकि तुरंत दिखाई नहीं देने वाला) के रूप में कार्य करता है। जब कोई प्रक्रिया वापस आती है, तो इसका दायरा नष्ट हो जाता है।
एक चर के मूल्य को मुद्रित करना
किसी चर का मान मुद्रित करने के लिए जैसे,
set tempVar "This is a string."
पुट कथन में तर्क $ संकेत से पहले है, जो Tcl को चर के मूल्य का उपयोग करने के लिए कहता है।
% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.
एक तर्क के साथ सेट करना
set भी सिर्फ एक तर्क के साथ लागू किया जा सकता है। जब केवल एक तर्क के साथ कहा जाता है, तो यह उस तर्क की सामग्री को लौटाता है।
% set x 235
235
% set x
235
परिवर्तनशील चर
unset कमांड का उपयोग एक या अधिक चर को हटाने के लिए किया जाता है।
unset ?-nocomplain? ?--? ?name name name name?
- प्रत्येक नाम एक परिवर्तनीय नाम है जो
setकमांड के स्वीकार्य किसी भी तरीके में निर्दिष्ट है। - यदि कोई नाम किसी सरणी के तत्व को संदर्भित करता है तो उस तत्व को शेष सरणी को प्रभावित किए बिना हटा दिया जाता है।
- यदि कोई नाम कोष्ठक में कोई अनुक्रमणिका के साथ एक सरणी नाम से बना है, तो संपूर्ण सरणी हटा दी जाती है।
- यदि -nocomplain को पहले तर्क के रूप में दिया जाता है, तो कमांड के आउटपुट से सभी संभावित त्रुटियों को दबा दिया जाता है।
- विकल्प - विकल्पों के अंत को इंगित करता है, और यदि आप किसी भी विकल्प के समान नाम के साथ एक चर निकालना चाहते हैं, तो इसका उपयोग किया जाना चाहिए।
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable
नाम स्थान चर
variable कमांड यह सुनिश्चित करता है कि एक दिया गया नाम स्थान वैरिएबल बनाया गया है। जब तक कोई मान इसे सौंपा नहीं जाता है, तब तक चर का मान अपरिभाषित होता है:
namespace eval mynamespace {
variable alpha
set alpha 0
}
चर को नाम स्थान के बाहर (वास्तव में, कहीं से भी) पहुँचा जा सकता है, नामस्थान के नाम को उसमें संलग्न करके:
set ::mynamespace::alpha
variable कमांड का उपयोग करके किसी प्रक्रिया के भीतर पहुंच को सरल बनाया जा सकता है:
proc ::mynamespace::myproc {} {
variable alpha
set alpha
}
यह नाम स्थान चर के लिए एक स्थानीय उपनाम बनाता है।
एक प्रक्रिया एक और नाम स्थान में परिभाषित के लिए, चर नाम के आह्वान में नाम स्थान शामिल होना चाहिए variable :
proc myproc {} {
variable ::mynamespace::alpha
set alpha
}