Tcl/Tk Insight: Tcl 基本语法

@ 2009-05-22 15:36:36
标签:
    «目录»

    1. Command (命令)

    Tcl脚本由命令组成。每条命令一行,由空格分隔的命令名参数组成。

    2. Group (分组)

    通过使用分组使单个参数可以包含空白字符(包括换行)。

    • 双引号 "": 参数在传递给命令前回进行替换操作。
    • 大括号 {}: 不进行参数的替换操作。

    3. Substitution (替换)

    • 变量替换: $var_name 或者 ${var_name} 会被替换成变量的值。
    • 命令替换: [command args ... ] 会被替换成命令的返回值。

    基本上掌握了上面三条原则,就掌握了Tcl/Tk语法上的本质。

    从上面的原则也可以看出,Tcl/Tk自身的语法相对于其他语言来说是比较简单的。

    Tcl中所有的语句都是命令,很多时候这非常适合描述人们对工具的操作。比如:

    # 描述GUI的操作
    open_dialog dlg_open_file
    set_dialog_field "File Name" "The file name to open"
    ok_dialog dlg_open_file
    
    # 或者直接简化为一条命令
    open_file $file_name
    

    相较於其他语言, Tcl 的基本语法规则非常简单, parser 只认得几个特殊字符.

    • 参数分隔符: (空格)
    • 命令分隔符: ;
    • 注释字符: (放在一个命令最前面的) #
    • 变量代换字符: $
    # 用分号将数个命令放在同一行
    puts hello ; puts world
    
    # 同一行的左边写命令, 右边写注释
    set msg "hello, world!" ; # this is a comment
    

    由于仅仅要求命令和参数之间以及参数之间用空白字符分割。这也意味着Tcl当中的命令名或者变量名并没有什么太多限制。比如完全可以模拟其他语言中的双斜线注释符如下。

    proc // {args} {
      # This is a comment. Do NOTHING.
    }
    
    // Some comment here
    

    注释

    Tcl 中的注释是比较有趣的。两种基本的注释方式

    • 以 # 号开始的行,被当作注释行
    • 一个命令结束后(分号),# 号后面的部分被当作注释。这里用来结束命令的分号是必须的。

    但考察下面的例子

    if { 3 < 10 } {
        # while { 3 < 5 } {
        puts "Inside ..."
    }
    

    带有 # 号的行,我们试图把它当作注释行,但实际执行时却会发现上面的代码是错误的。原因在于 大括号没有成对匹配。
    出现这样情况的原因在于,带有# 号的行首先是 if 命令参数内容的一部分,它首先被当作文本来解释。

    标签:

      分享到:
      comments powered by Disqus

      30/34ms