3
proc rep {name} {
    upvar $name n 
    puts "nm is $n"
}

In the above procedure, 'name' is a parameter which is passed to a procedure named 'rep'. When I run this program I got "error : Can't read "n" : no such variable". Could any one tell me what could be the possible cause for this error.

4

2 回答 2

5

rep如果您传递给其名称的变量在调用范围内不存在,则会产生该错误消息。例如,用 tclsh 检查这个交互式会话……</p>

% 过程代表 {名称} {
    upvar $name n
    提出“nm 是 $n”
}
% 代表富
无法读取“n”:没有这样的变量
% 设置富 x
X
% 代表富
纳米是 x

更深入……</h2>

如果未设置变量,则该变量foo处于有趣的状态upvar;它实际上是存在的(它在全局命名空间的变量哈希表中被引用)但没有内容,因此测试它是否存在失败。(当一个变量在某处有一个条目时,即存在一个变量——也就是说,某个存储将其内容放入其中——并且它在该存储中设置了一个值;一个未设置的变量可以是一个NULL在 C 级别具有 a 的变量存储。由于这个原因,Tcl 语言本身根本不支持NULL值;它们对应于不存在。)

于 2013-02-08T08:56:48.570 回答
2

我也遇到了这个。我意识到我发送的是 $foo 而不是 foo (注意,没有美元符号)。

% set foo 1
%
% rep $foo
can't read "foo": no such variable
%
% rep foo
nm is 1

希望能帮助到你。

于 2014-10-20T22:55:23.617 回答