2017-07-14 83 views
1

一個新的字典,我想編寫一個PROC它可以接受字典作爲optional argument或者如果沒有被賦予新創建的。我的嘗試,但是,失敗如何設置默認值的參數proc是Tcl的

的說法符太多的領域 「詞典[字典創建]」

proc getOpts { {dictionary [dict create]} } { 
    upvar $dictionary dct 
    for { set i 0 } { $i < $::argc } { incr i } { 
     set key [lindex $::argv $i] 
     if { [string index $key 0] == "-" } { 
      incr i 
      dict set dct [string trimleft $key "-"] [lindex $::argv $i] 
     } else { 
      dict set dct $key "" 
     } 
    } 
} 

由於dictionaries are pure values,我想這可能是工作。看起來我可能錯了。不過,我想知道爲什麼它不起作用。

+0

只需使用{}。但你的upvar不會工作。 –

回答

1

它不起作用的原因是參數變量列表是一個真正的列表,而不是一個命令評估上下文。這意味着[dict create]被解析爲兩個單獨的詞,並且proc不喜歡那樣。幸運的是,沒有其他參數的dict create僅僅是表示空字符串的另一種方式:使用{}""代替。

更大的問題是,你用upvar;你可能不想這樣做。正確的做法可能是不做變量綁定,而只是從過程中返回字典:調用者可以將它保存在它自己的一個變量中,如果它關心的話。

+0

感謝您的解釋。所以如果'proc'有一個可選參數,我不能用它傳遞信息給調用者,因爲我不能對它做'upvar',對吧? –

+1

@Tao先生:1)通過返回值,您可以在任何情況下將信息傳回給調用者。 2)它不是引起'upvar'問題的可選參數值:問題是'upvar'的參數(在可選級別參數之後)需要是變量名稱。 –

+0

@PeterLewerin By _it_我一直在引用可選參數,而不是'proc'本身。 –

相關問題