TCL: 變數和過程variable

Augusdi發表於2015-08-26


名稱

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必須符合陣列的要求,宣告過變數後,陣列中的元素可以使用setarray命令來配置。

示例

在名字空間中建立一個變數:
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      }  }

相關文章