吴忠躺衫网络科技有限公司

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

    文章

    1741

    瀏覽量

    88875
  • 置換
    +關注

    關注

    0

    文章

    3

    瀏覽量

    2035

原文標題:深入理解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 ?4355次閱讀

    深入理解MOS管電子版資源下載

    深入理解MOS管電子版資源下載
    發表于 07-09 09:43 ?0次下載

    深入理解深度學習的反(轉置)卷積

    本文首發于 GiantPandaCV :深入理解神經網絡的反(轉置)卷積作者:梁德澎本文主要是把之前在知乎上的回答:反卷積和上采樣+卷積的區別...
    發表于 02-07 11:17 ?0次下載
    <b class='flag-5'>深入理解</b>深度學習<b class='flag-5'>中</b>的反(轉置)卷積
    香港六合彩挂牌| 百家乐官网外套| 百家乐游戏机价格| 决胜德州扑克刷金币| 新朝代百家乐官网开户网站| 凯旋门百家乐技巧| 新葡京娱乐城官方网站| 圣淘沙百家乐官网的玩法技巧和规则 | 扑克百家乐官网赌器| 大连百家乐商场| 百家乐官网8点| 百家乐博娱乐场开户注册| 百家乐官网分析软件下| 现场百家乐投注| 百家乐官网论坛百科| 百家乐买闲打法| 百家乐官网高手和勒威| 百家乐赌博讨论群| 百家乐官网大赢家书籍| 百家乐路子分| 圣淘沙百家乐官网娱乐城| 百家乐无损打法| 澳门百家乐官网真人版| 百家乐平一直压庄| 威尼斯人娱乐场28| 百家乐官网打闲赢机会多| 全讯网五湖四海| 立即博百家乐官网的玩法技巧和规则| 集结号棋牌下载| 百家乐最常见的路子| 白朗县| 百家乐真人游戏网| 德阳市| 圣淘沙百家乐的玩法技巧和规则 | 百家乐官网隔一数打法| 加州百家乐的玩法技巧和规则| 百家乐官网笑话| 新皇冠现金网怎么样| 免费百家乐规则| 百家乐官网有人赢过吗| 合肥太阳城在哪|