2012-05-31 41 views

回答

4

嘗試運行從這個進程內的TCLer的Wiki

proc listns {{parentns ::}} { 
     set result [list] 
     foreach ns [namespace children $parentns] { 
       eval lappend result [listns $ns] 
       lappend result $ns 
     } 
     return $result 
    } 

當我運行它,我得到以下的輸出:

% listns 
::platform ::activestate::teapot::link ::activestate::teapot ::activestate ::tcl 
::clock ::tcl::info ::tcl::dict ::tcl::tm ::tcl::mathop ::tcl::unsupported ::tcl 
::mathfunc ::tcl::chan ::tcl::string ::tcl 
% 

因此,讓所有的命名空間,只需要這樣做:

set all_namespaces [concat [listns] "::"] 
+0

可以通過'tailcall'在8.6中更好地完成。 – schlenk

+3

@schlenk不是真的;當涉及到尾部呼叫優化時,全樹遍歷不是很好。 'lappend result {*} [listns $ ns] $ ns'雖然會有所改進(並且只需要廣泛部署的8.5)。 –

+0

它沒有列出:: ...它也只列出了::的子元素,還有沒有其他名稱空間不在::中? –

相關問題