.
.
很多人在使用tcl的時候都有疑問,爲什麼tcl中沒有定義struct結構?那是因爲在tcl中,namespace可以取代部分struct的功能,而且tcl的數組是非常強大的,不像C語言中限定索引必須爲整數,tcl數組的索引理論上可以爲任何字符串。如果在使用過程當中確實需要使用C語言風格的struct,可以使用數組來實現。下面就舉例說明實現方法。
1、首先定義一個struct模版,就像C語言中一樣,使用數組來定義。
假設需要的struct爲structTemplet,裏面需要的元素分別爲name、size、id、price,那麼需要這樣來定義模版,默認初始化數值都爲空,也可以有一個默認值:
set structTemplet(name) {}
set structTemplet(size) {}
set structTemplet(id) {}
set structTemplet(price) {}
2、定義一個過程,根據定義的struct模版來生成一個新的結構。
假設過程名爲struct_new,第一個參數structUser爲需要生成的結構,第二個參數structTemplet爲stuct模版,過程如下:
proc struct_new {structUser structTemplet} {
upvar 1 $structUser structNew
upvar 1 $structTemplet structOld
foreach index [array name structOld] {
set stuctNew($index) $stuctOld($index)
}
return
}
注意在調用過程時把變量名稱傳給過程,調用的時候使用struct_new mystruct structTemplet,不需要加$標示。
以上只是定義了一個方法,如果有需要可以自己定義其它的過程來做初始化結構數據、搜索結構數據等其它操作。