proc rep {name} {
upvar $name n
puts "nm is $n"
}
在上述过程中,“name
”是一个传递给名为“rep
”的过程的参数。当我运行这个程序时,我得到了“error : Can't read "n" : no such variable
”。任何人都可以告诉我这个错误的可能原因是什么。
答案 0 :(得分:5)
如果调用范围中不存在您传递给rep
的名称的变量,则会生成该错误消息。例如,使用tclsh ...
% proc rep {name} { upvar $name n puts "nm is $n" } % rep foo can't read "n": no such variable % set foo x x % rep foo nm is x
变量foo
在upvar
之后处于一个有趣的状态,如果它未被设置;它实际存在(它在全局命名空间的变量哈希表中引用)但没有内容,因此测试它是否存在失败。 (当一个变量在某个地方有一个条目时就会存在 - 也就是说,一些存储器用于放置其内容 - 并且它在该存储器中设置了一个值;一个未设置的变量可以是一个具有NULL
的变量。存储中的C级。由于这个原因,Tcl语言本身根本不支持NULL
值;它们对应于不存在。)
答案 1 :(得分:1)
我也碰到了这个。我意识到我发送$ foo而不是foo(注意,没有美元符号)。
% set foo 1
%
% rep $foo
can't read "foo": no such variable
%
% rep foo
nm is 1
希望它有所帮助。