【发布时间】:2016-09-14 22:59:24
【问题描述】:
纠正我的错误。
当我们使用大括号内的变量时,值不会在求值过程中被替换,而只是作为参数传递给过程/命令。 (是的,有一些例外,例如expr {$x+$y})。
考虑以下场景,
场景 1
% set a 10
10
% if {$a==10} {puts "value is $a"}
value is 10
% if "$a==10" "puts \"value is $a\""
value is 10
场景 2
% proc x {} {
set c 10
uplevel {set val $c}
}
%
% proc y {} {
set c 10
uplevel "set val $c"
}
% x
can't read "c": no such variable
% y
10
% set val
10
%
在这两种情况下,我们都可以看到变量替换是在if 循环体上执行的(即{puts "value is $a"}),而在uplevel 中则不是(即{set val $c}) ,基于当前上下文。
我可以看到好像他们可以通过upvar 访问它一样的东西。但是,为什么它必须在不同的地方不同?在幕后,为什么要这样设计?或者这只是Tcl 的常规工作方式?
【问题讨论】:
标签: variables if-statement scope tcl uplevel