Tcl 了解大括号的用法

Tcl 了解大括号的用法,tcl,Tcl,我正在学习Tcl/Tk,对Tcl中花括号的用法感到困惑 对我来说,它似乎既用来表示作用域,也用来声明字符串!这是一个bug(或特性)吗 我的解释正确吗?花括号将单词组合成参数。你可以通过谷歌在互联网上找到很多tcl的东西。简而言之,这里有一个 Tcl的大括号的作用类似于sh的单引号——将单词(和行)分组而不插入 Tcl的双引号与sh的双引号类似——允许插值 在proc定义中使用大括号不是强制性的。这是将脚本作为参数传递给proc而无需插值的最方便的方法 这些是等价的 proc add3 {a

我正在学习Tcl/Tk,对Tcl中花括号的用法感到困惑

对我来说,它似乎既用来表示作用域,也用来声明字符串!这是一个bug(或特性)吗


我的解释正确吗?

花括号将单词组合成参数。你可以通过谷歌在互联网上找到很多tcl的东西。简而言之,这里有一个

  • Tcl的大括号的作用类似于sh的单引号——将单词(和行)分组而不插入
  • Tcl的双引号与sh的双引号类似——允许插值
proc
定义中使用大括号不是强制性的。这是将脚本作为参数传递给proc而无需插值的最方便的方法

这些是等价的

proc add3 {a b c} {
    return [expr {$a + $b + $c}]
}


一旦你将Tcl报价内部化,你就会意识到Tcl是多么灵活。

man n Tcl

这是Tcl解释器的手册页面!读一下。再读一遍!你甚至可以考虑去一个安静的地方大声朗读。这会妨碍你读得太快。每一封信都很重要

一旦你发现自己陷入了“引用地狱”的境地,回到这份文件,再看一遍

有一个在线版本,网址为:

在回答Toddius Zho的评论时,我看到了一些问题(我自己也问过),为什么在使用变量时使用大括号,例如${var}

在TCL中,标准标量变量可以由任何字符组成。 但是,变量替换运算符“$”假定您使用的是字母数字字符和下划线(加上名称空间分隔符):“)

因此,如果使用非字母数字字符(如“!”)设置变量,TCL在尝试替换该变量时将出错

% set myvar! 123
123
% puts $myvar!
can't read "myvar": no such variable
使用花括号时,替换运算符不会出错:

% set myvar! 123
123
%puts ${myvar!}
123
这是因为TCL不会对大括号中定义的任何内容执行替换/插值


如果答案中不清楚,插值意味着将发生替换。如果您有一个名为myvar=“some string”的变量,那么{a$myvar b}将导致字符串文本“a$myvar b”。。。虽然“a$myvar b”将导致字符串文字“a some string b”谢谢,但我想我现在明白了。我想,要想完全理解tcl,就必须多用一点。我想说“你只需要在需要使用花括号的时候使用花括号”,这意味着——与大多数语言不同——花括号只用于引用。语言中没有任何东西需要你使用大括号。它们是报价机制,您可以选择使用或不使用。当然,有一些最佳实践表明何时使用它们是明智的……我可以理解“index”、“$index”、“{index}”和“{$index}”。我最近遇到了“${index}”,并且。。。胡说?!最终是可以解析的,但为什么要这样写呢?因为我从来没有回复过那个评论:当变量名中有其他不应该包含的文本时,使用大括号替换变量:
set index 4;放置“这是第${index}个索引”
% set myvar! 123
123
%puts ${myvar!}
123