我将在这里使用Perl作为比较:
$foo = 5;
print $foo;
Run Code Online (Sandbox Code Playgroud)
将变量设置$foo为5,然后打印变量的内容($foo始终作为访问的通知$foo).
在Tcl中:
set foo 5
puts $foo
Run Code Online (Sandbox Code Playgroud)
与Perl对应物做同样的事情.
为什么Tcl不用"$"设置变量,但需要"$"来访问变量?为什么程序也是如此(例如proc bar {spam eggs} {...})?对我来说,Tcl代码看起来像这样(在伪代码中):
"foo" = 5 # Setting a string?
puts $foo # "$foo" is not defined.
Run Code Online (Sandbox Code Playgroud)
(我的评论只反映了似乎正在发生的事情,而不是正在发生的事情).
我要补充的另一点是清晰度:
set foo foo
Run Code Online (Sandbox Code Playgroud)
是的,我可以随时做set foo "foo",但不是set $foo foo更一致吗?
据我所知,"foo"可以是变量或字符串,具体取决于具体情况,如我上一个例子(set foo foo= set var string)所示,但我没有得到这种语法(也许是因为我习惯了Python .. .)