2012-04-04 13 views
9

जानता हूं कि मैं जिस प्रोसेस का नाम हूं उसका नाम क्या है। मेरा मतलब है कि मुझे इसकी आवश्यकता है:टीसीएल उस प्रो नाम को प्राप्त करता है जिसमें मैं

proc nameOfTheProc {} { 

    #a lot of code here 
    puts "ERROR: You are using 'nameOfTheProc' proc wrongly" 
} 

इसलिए मैं "nameOfTheProc" प्राप्त करना चाहता हूं लेकिन हार्ड कोड नहीं। ताकि जब कोई व्यक्ति proc नाम बदल देगा तो यह अभी भी ठीक से काम करेगा। भीतरी info level साथ

proc nameOfTheProc {} { 

    #a lot of code here 
    puts "ERROR: You are using '[lindex [info level [info level]] 0]' proc wrongly" 
    puts "INFO: You specified the arguments: '[lrange [info level [info level]] 1 end]'" 
} 

आप प्रक्रिया कॉल गहराई का स्तर मिल जाएगा आप में हैं बाहरी एक प्रक्रिया के नाम वापस आ जाएगी:

+0

+1 अच्छा सवाल, इसने बहुत सारे रोचक उत्तरों का उत्पादन किया। –

उत्तर

11

आप अपनी समस्या के लिए info level आदेश का उपयोग कर सकते हैं। अपने आप।

+2

'[जानकारी स्तर [जानकारी स्तर]]' '[जानकारी स्तर 0] 'के रूप में लिखा जा सकता है ... –

+0

@ डोनल: हाँ - आप सही हैं। – bmk

+2

यदि ऐसा है तो उत्तर क्यों संपादित नहीं करें? – zehelvion

5

यदि आपका चल रहा टीसीएल 8.5 या बाद में info frame कमांड सूची के बजाए एक नियम लौटाएगा। तो कोड इस प्रकार संशोधित:

proc nameOfTheProc {} { 
    puts "This is [dict get [info frame [info frame]] proc]" 
} 
+0

यह पूरी तरह से सच नहीं है। 'जानकारी स्तर' अभी भी एक सूची लौटाएगा (कम से कम संस्करण 8.5 में)। लेकिन 'जानकारी फ्रेम' एक नियम देता है। – bmk

+0

@bmk आपका बिल्कुल सही - मैंने जवाब तय कर दिया है, इसलिए यह टेक्स्ट में जानकारी फ्रेम है। – Jackson

+0

जानकारी स्तर तर्क सूचियों के बारे में है, जानकारी फ्रेम सामान्य फ्रेम वर्णनकर्ताओं के बारे में है। दोनों एक दूसरे के पूरक हैं। –

5

क्या अपने प्रश्न में गर्भित return -code error $message इस तरह उपयोग करने के लिए है प्राप्त करने के लिए सही रास्ता मुहावरेदार:

proc nameOfTheProc {} { 
    #a lot of code here 
    return -code error "Wrong sequence of blorbs passed" 
} 

इस तरह आप अपने प्रक्रिया एक में बिल्कुल वैसा ही व्यवहार करेंगे वैसे स्टॉक टीसीएल कमांड तब करते हैं जब वे उनसे संतुष्ट नहीं होते हैं जिनके साथ उन्हें कॉल किया गया है: इससे कॉल साइट पर कोई त्रुटि होगी।

+0

+1 मैं इसमें @ कोस्टिक्स के साथ हूं। –

+0

यह मुझे नहीं बताता कि कौन सी proc कहा जाता था, है ना? – Narek

+0

@ नरेक, आप इसे स्टैक ट्रेस से देखेंगे जिसमें त्रुटि संदेश दोनों शामिल होंगे और प्रक्रिया के नाम में त्रुटि वापस आ जाएगी। यदि आप उस त्रुटि को पकड़ लेंगे (यानी रनटाइम को प्रोग्राम को समाप्त करने और स्टैक ट्रेस को डंप करने की अनुमति न दें) तो आप ['return'] (http: //www.tcl में वर्णित टूल का उपयोग करके स्थिति का निरीक्षण करने में सक्षम होंगे। टीके/मैन/टीसीएल 8.5/टीसीएलसीएमडी/वापसी एचटीएम) मैनुअल ('errorInfo' आदि)। – kostix

संबंधित मुद्दे