2012-05-31 3 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

8.6에서'tailcall'을 사용하여 더 좋게 만들 수 있습니다. – schlenk

+3

@schlenk 아니요. 꼬리 호출 최적화에 관해서는 전체 트리 순회가 좋지 않습니다. 'lappend result {*} [listns $ ns] $ ns'는 개선 될 것입니다 (그리고 널리 배포 된 8.5 만 필요합니다). –

+0

그것은 ::를 나열하지 않습니다 :: 또한 그것의 자식만을 나열합니다 ::, ::: 아래에 다른 다른 네임 스페이스가 있습니까? –

관련 문제