TCL 结构体

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容