天天看点

在tcl中创建struct结构

.

.

    很多人在使用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,不需要加$标示。     以上只是定义了一个方法,如果有需要可以自己定义其它的过程来做初始化结构数据、搜索结构数据等其它操作。

继续阅读