2011-05-25 18 views
6

में स्थिर चर टीसीएल में स्थिर चर घोषित करना संभव है?
मैं अज्ञात कमांड त्रुटियों को पकड़ने के लिए एक निश्चित फ़ंक्शन का उपयोग करता हूं, और मैं इसे अज्ञात कमांड की पहली उपस्थिति पर एक त्रुटि संदेश मुद्रित करना चाहता हूं - इसलिए मुझे proc के अंदर एक स्थिर सूची की तरह कुछ रखना होगा। क्या यह संभव है?टीसीएल

उत्तर

4

या आप सिर्फ एक सीधी वैश्विक चर का उपयोग कर सकते हैं:

set varList {} 

proc useCount {value} { 
    global varList ; 
    lappend varList $value 
} 

useCount One 
useCount Two 
puts $varList 
2

नहीं। लेकिन अगर आप एक वैश्विक (आमतौर पर namespaced) सरणी उदाहरण के लिए proc नाम द्वारा अनुक्रमित का उपयोग कर सकते हैं:

namespace eval foo { 
    variable statics 
    array set statics {} 
} 
... 
proc ::foo::bar args { 
    variable statics 
    upvar 0 statics([lindex [info level 0] 0]) myvar 
    # use myvar 
} 
+0

अद्यतन: एक सामान्य विचार के लिए http://wiki.tcl.tk/memoizing भी देखें – kostix

2

Tcl करता है स्थैतिक चर का समर्थन नहीं करते हैं। एक वैश्विक चर या नामस्थान के अंदर एक चर का उपयोग करने के बजाय, एक और विकल्प कक्षा के भीतर एक विधि के रूप में अपनी प्रक्रिया को लागू करना है (देखें [incr tcl] या snit)। आप स्थिर चर को लागू करना चाहिए, तो Tcl विकि एक पृष्ठ इस मुद्दे पर चर्चा की है: http://wiki.tcl.tk/1532

0

जैसा कि मैंने वैश्विक चर पसंद नहीं है (जब तक आप एक छोटे से स्क्रिप्ट है), मैं @kostix और @Jackson से समाधान गठबंधन:

namespace eval foo { 
    variable varList {} 
} 
proc foo::useCount {value} { 
    variable varList 
    lappend varList $value 
} 

foo::useCount One 
foo::useCount Two 

puts $foo::varList 
संबंधित मुद्दे