0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Tcl系列文章:深入理解Tcl中的置换

电子工程师 来源:未知 作者:胡薇 2018-08-28 08:03 次阅读

Tcl语言中有三类置换:变量置换、命令置换和反斜杠置换。可以说“置换”是Tcl的灵魂,同时也是让初学者容易感到困惑的一个难点。很多初学者常会碰到这样的情形:不希望发生置换时却发生了或者希望发生置换时却没有发生,加之一些Tcl解释器调试功能欠佳,往往让初学者受挫,觉得自己的脚本发生了诡异的行为。实际上,Tcl的置换机制很简单,其行为也很容易预测,只需记住如下两条规则:

规则1:Tcl在解析一条命令时,只从左向右解析一次,进行一轮置换,每一个字符只会被扫描一次;

规则2:每一个字符只会发生一层置换,而不会对置换后的结果再进行一次扫描置换

看一个典型的例子,在这个例子中,变量x被赋值为10,变量a被赋值为字符x。之后,给变量b赋值$$a。根据上述规则,Tcl从左向右对命令”set b $$a”进行解析,扫描所有的字符,发现$$a时,执行变量置换,得到$x,同时只发生一层置换,不会对置换后的结果$x再进行扫描置换(否则$$a中最左侧也就是第一个$将被扫描两次,与规则1冲突,)。因此,最左侧的$并不会触发变量置换,最终变量b的值将会是$x,而不是10。

根据上述两个规则,理解如下脚本的执行结果。

从Tcl代码风格的角度看,应尽可能地将置换简单化,这意味着尽可能地将多层次嵌套的置换分解为更简单的层次置换,这可通过命令分解实现。同时避免在同一条命令中出现太多的置换,尤其避免出现太多复杂的不同类型的置换,这对代码维护十分不利。此外,值得考虑的方法是建立“过程”,将复杂的操作隔离开来,从而增强代码的可读性和可维护性。看这样一个例子,计算两个字符串的总长度,这里用到了三个命令:set、expr和stringlength。在计算str_len时,使用了变量置换和命令置换,同时出现了命令嵌套。

对比另一种写法,将嵌套拆分,代码的可读性便跃然纸上。

结论:

Tcl在解析一条命令时

-每个字符只会被扫描一次

-每个字符只会发生一层置换

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCL
    TCL
    +关注

    关注

    10

    文章

    1722

    浏览量

    88567
  • 置换
    +关注

    关注

    0

    文章

    3

    浏览量

    2019

原文标题:深入理解Tcl中的置换

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA威廉希尔官方网站 驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入理解Android

    深入理解Android
    发表于 08-20 15:30

    深入理解和实现RTOS_连载

    和trcohili的帖子。深入理解和实现RTOS_连载1_RTOS的前生今世今天发布的是第一篇,"RTOS的前生今世"。通过软件系统结构的比对简要的介绍rtos为何而生。如果读者对RTOS
    发表于 05-29 11:20

    深入理解和实现RTOS_连载

    和trcohili的帖子。trochili rtos完全是作者兴趣所在,且行且坚持,比没有duo。深入理解和实现RTOS_连载1_RTOS的前生今世今天发布的是第一篇,"RTOS的前生今世"
    发表于 05-30 01:02

    深入理解lte-a

    深入理解LTE-A
    发表于 02-26 10:21

    深入理解STM32

    时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32。下面是从网上找的一个STM32时钟框图,比《STM32文参考手册》里面的是中途看起来清晰一些:重要的时钟:PLLCLK,SYSCLK,HCKL,PCLK1,..
    发表于 08-12 07:46

    对栈的深入理解

    为什么要深入理解栈?做C语言开发如果栈设置不合理或者使用不对,栈就会溢出,溢出就会遇到无法预测乱飞现象。所以对栈的深入理解是非常重要的。注:动画如果看不清楚可以电脑看更清晰啥是栈先来看一段动画:没有
    发表于 02-15 07:01

    为什么要深入理解

    [导读] 从这篇文章开始,将会不定期更新关于嵌入式C语言编程相关的个人认为比较重要的知识点,或者踩过的坑。为什么要深入理解栈?做C语言开发如果栈设置不合理或者使用不对,栈就会溢出,溢出就会遇到无法
    发表于 02-15 06:09

    深入理解应用广泛的QMatrix 威廉希尔官方网站

    深入理解应用广泛的QMatrix 威廉希尔官方网站 作者:Hal Philipp 量研集团首席威廉希尔官方网站 官摘要在家电、消费电子和手机应用,触摸传感控制正在日益取代机电开关。触摸传感的流行获有很强的
    发表于 02-06 17:08 28次下载

    深入理解Android之资源文件

    深入理解Android之资源文件
    发表于 01-22 21:11 22次下载

    深入理解Android》文前

    深入理解Android》文前
    发表于 03-19 11:23 0次下载

    深入理解Android:卷I》

    深入理解Android:卷I》
    发表于 03-19 11:23 0次下载

    深入理解Android网络编程

    深入理解Android网络编程
    发表于 03-19 11:26 1次下载

    老司机带你深入理解ST库的 assert_param 语句

    老司机带你深入理解ST库的assert_param语句
    的头像 发表于 03-14 14:52 4252次阅读

    深入理解MOS管电子版资源下载

    深入理解MOS管电子版资源下载
    发表于 07-09 09:43 0次下载

    深入理解深度学习的反(转置)卷积

    本文首发于 GiantPandaCV :深入理解神经网络的反(转置)卷积作者:梁德澎本文主要是把之前在知乎上的回答:反卷积和上采样+卷积的区别...
    发表于 02-07 11:17 0次下载
    <b class='flag-5'>深入理解</b>深度学习<b class='flag-5'>中</b>的反(转置)卷积