2013-12-10 6 views
0

인수 (키 값)를 전달하려고합니다. 키 내부에 키 (value1 value2 ...)가 포함될 수 있으며 값은 다시 value1이 될 수 있습니다 (data1 data2 data2) 형식은 다음과 같습니다. 내가 얻기 위해 노력하고다른 인수에 인수를 전달하는 방법

proc find {args } { 
    array set opt {-find "" } 
    if {$opt(-find) == "?" } { 
     .... 
     puts "list of search items like google, msn" 
    } 
    if {$opt(-find) == "google" } { 
     .... 
     puts "...." 
    } 
} 

아래에 표시된 명령은

 
find -find ? 
displayresults google, msn.... 

find -find google 
displayresults gmail.... 

find -find google gmail 
results username pw ... 

find -find google gmail pw 
displayresults .... 

답변

0

은 당신이 원하는 것은 cmdline 패키지입니다. 다음은 시작하기위한 약간의 샘플입니다.

  • package require cmdline 
    
    proc find {args} { 
        set flags { 
         {server.arg "" "Which server to search"} 
        } 
    
        array set options [cmdline::getoptions args $flags] 
    
        if {$options(server) eq "google"} { 
         puts "Search Google" 
        } elseif {$options(server) eq "?"} { 
         puts "Display Help" 
        } 
    } 
    
    # Example usages  
    find -server google one two three ;# Case 1: $options(server)=="google" 
    find -server ?      ;# Case 2: display help 
    find        ;# Case 3: no -server flag 
    find -server "google msn" one two ;# Case 3: $options(server)=="google msn" 
    

    토론은 내가 더 의미가 생각 내 플래그 대신 -find-server, 전화.

  • 사용자가 -server 플래그를 제공하지 않는 경우 $ options (server)는 빈 문자열 ""입니다.
  • 나머지 사례는 자명합니다.
+0

리터럴을 선택할 때 내부적으로 해시 테이블을 만드는 'switch'를 사용해보십시오. –

+0

좋습니다. if 명령은 OP가 사용하기 편리하기 때문에 사용되었습니다. –

+0

패키지 대신에 HIERARCHICAL METHOD를 사용할 수 있습니까? cmdline이 필요합니까? – user3069844

관련 문제