很多人在使用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,不需要加$标示。
以上只是定义了一个方法,如果有需要可以自己定义其它的过程来做初始化结构数据、搜索结构数据等其它操作。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dulixin/archive/2008/04/09/2267979.aspx