Tcl - नामस्थान

Namespace पहचानकर्ताओं के समूह के लिए एक कंटेनर है जिसका उपयोग समूह चर और प्रक्रियाओं के लिए किया जाता है। Namespaces Tcl वर्जन 8.0 से उपलब्ध हैं। नामस्थानों की शुरुआत से पहले, एकल वैश्विक गुंजाइश थी। अब नाम स्थान के साथ, हमारे पास वैश्विक दायरे के अतिरिक्त विभाजन हैं।

नाम स्थान बनाना

नाम का उपयोग कर बनाया जाता है namespaceआदेश। नेमस्पेस बनाने के लिए एक सरल उदाहरण नीचे दिखाया गया है -

#!/usr/bin/tclsh

namespace eval MyMath {
  # Create a variable inside the namespace
  variable myResult
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
  set ::MyMath::myResult [expr $a + $b]
}
MyMath::Add 10 23

puts $::MyMath::myResult

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

33

उपरोक्त कार्यक्रम में, आप देख सकते हैं कि एक चर के साथ एक नाम स्थान है myResult और एक प्रक्रिया Add. इससे विभिन्न नामस्थानों के अंतर्गत समान नाम वाले चर और प्रक्रियाएँ बनाना संभव हो जाता है।

नेस्टेड नेमस्पेस

Tcl नेमस्पेस के घोंसले के शिकार की अनुमति देता है। नेमस्पेस नामकरण का एक सरल उदाहरण नीचे दिया गया है -

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
}

namespace eval extendedMath {
   # Create a variable inside the namespace
   namespace eval MyMath {
      # Create a variable inside the namespace
      variable myResult
   }
}
set ::MyMath::myResult "test1"
puts $::MyMath::myResult
set ::extendedMath::MyMath::myResult "test2"
puts $::extendedMath::MyMath::myResult

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

test1
test2

Namespace का आयात और निर्यात

आप पिछले नाम स्थान के उदाहरणों में देख सकते हैं, हम बहुत अधिक गुंजाइश रिज़ॉल्यूशन ऑपरेटर का उपयोग करते हैं और यह उपयोग करने के लिए अधिक जटिल है। हम नाम स्थान आयात और निर्यात करके इससे बच सकते हैं। एक उदाहरण नीचे दिया गया है -

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}

namespace import MyMath::*
puts [Add 10 30]

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

40

नेमस्पेस को भूल जाओ

आप किसी आयातित नाम स्थान का उपयोग करके निकाल सकते हैं forgetsubcommand। एक सरल उदाहरण नीचे दिखाया गया है -

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
namespace forget MyMath::*

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

40