名稱
variable - 創建和初始化一個名字空間變量語法
variable ?name value...? name ?value?描述
這個命令一般在名字空間中創建一個或多個變量,每個變量name使用value初始化,最後一個變量的value是可選的。如果變量name不存在,就創建一個,在這種情況下,如果指定了value,就把它的值賦值給創建的變量,如果不指定value,新的變量name就沒有初始化。如果變量已經存在,就賦值value,沒有指定value則保持原來的值。一般來說name不做任何限定(不包含名字空間限定),並且在當前名字空間中創建,如果name包含有名字空間限定,變量就創建在指定的名字空間中,如果變量沒有定義,對於namespace which命令來說就是可見的,但是對info exists命令來說是不可見的。
如果variable命令在一個tcl過程中執行,就創建一個局部變量,這個局部變量鏈接一個相關的名字空間變量(因此這些變量由info vars列出),這樣variable命令類似global命令,雖然global命令只是鏈接一個在全局範圍內的變量,如果給出了values,就用來修改相關名字空間變量,如果一個名字空間變量不存在,就創建一個並且初始化。
name變元不能引用一個數組的元素,但是name可以引用整個數組並且初始化的value必須符合數組的要求,聲明過變量後,數組中的元素可以使用set和array命令來配置。
示例
在名字空間中創建一個變量:namespace eval foo { variable bar 12345 }
在名字空間中創建一個數組:
namespace eval someNS { variable someAry array set someAry { someName someValue otherName otherValue } }
爲一個過程存取名字空間中的變量:
namespace eval foo { proc spong {} { # Variable in this namespace variable bar puts "bar is $bar" # Variable in another namespace variable ::someNS::someAry parray someAry } }