2011-06-23 94 views
9

我已經得到了我想要爲默認值使用的參數變量的TCL PROC參數的默認值:如何使用一個變量作爲

proc log {message {output $::output}} { 
    .... 
} 

有沒有辦法做到這一點還是需要我來評估我的過程中的變量?

回答

11

是的,但不能使用花括號({})作爲參數列表。您聲明程序例如這種方式:

proc log [list message [list output $::output]] { 
    .... 
} 

但要注意:
該變量在當程序被聲明的時間來評價,而不是當它被執行!

+2

+1:這是完美的定義時的默認設置。 –

7

如果你想要一個默認參數,這個參數只在你調用時定義的值,你必須更加棘手。最關鍵的是,你可以用info level 0獲得的參數列表當前過程調用,然後你只檢查列表的長度:

proc log {message {output ""}} { 
    if {[llength [info level 0]] < 3} { 
     set output $::output 
    } 
    ... 
} 

記住,檢查的參數列表時,第一個是命令本身的名稱。

+0

+1用於檢查提供的參數數量,vs僅檢查輸出是否爲空字符串!那麼,無論如何,你都會得到+1的有用答案,但我很高興你這樣做:) – RHSeeger

+0

優秀的答案,但要注意,以這種方式,你不能區分用戶提供命令'log hello' 「'和'登錄你好'。你可以改變默認的輸出字符串(改變「」),但是你會得到與新值相似的問題。可能不會經常發生,但當它發生時... – Roalt

+0

@Roalt:你的意思是把這個評論放在另一個答案?與我的一樣,您可以通過簡單計數_counting_實際提供多少個值。這很簡單。 –

1

另一種方式來做到這一點:

proc log {message {output ""}} { 
    if {$output eq ""} { 
     set output $::output 
    } 
}