gle*_*man 28
简而言之,
在proc定义中使用花括号的事实不是强制性的.这是将脚本作为参数传递给proc而不进行插值的最方便的方法.
这些是等价的
proc add3 {a b c} {
return [expr {$a + $b + $c}]
}
Run Code Online (Sandbox Code Playgroud)
和
proc add3_weird [list a b c] "return \[expr {\[set a] + \[set b] + \[set c]}]"
Run Code Online (Sandbox Code Playgroud)
一旦你内化了Tcl引用,你就会意识到Tcl的真正灵活性.
在回答Toddius Zho的评论时,我已经看到了几个问题(并让我感到自己):在使用变量(例如$ {var})时为什么使用花括号
在TCL中,标准标量变量可以包含任何字符。但是,变量替换运算符“ $”假定您使用字母数字字符和下划线(加上名称空间分隔符“ ::”)
因此,如果将变量设置为非字母数字字符,例如“!”,则在尝试替换该变量时,TCL将出错。
% set myvar! 123
123
% puts $myvar!
can't read "myvar": no such variable
Run Code Online (Sandbox Code Playgroud)
使用大括号替代运算符不会出错:
% set myvar! 123
123
%puts ${myvar!}
123
Run Code Online (Sandbox Code Playgroud)
这是因为TCL不会对花括号内定义的任何内容执行替换/插值。
http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm