Pra*_*mar 3 variables tcl upvar
proc rep {name} {
upvar $name n
puts "nm is $n"
}
Run Code Online (Sandbox Code Playgroud)
在上面的过程中,' name'是一个传递给名为' rep' 的过程的参数.当我运行这个程序时,我得到了" error : Can't read "n" : no such variable".任何人都可以告诉我这个错误的可能原因是什么.
如果传递给您的名称的变量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; 它实际存在(它在全局命名空间的变量哈希表中引用)但没有内容,因此测试它是否存在失败.(当一个变量在某个地方有一个条目时就会存在这个变量 - 也就是说,它有一些存储来放置它的内容 - 并且它在该存储中设置了一个值;一个未设置的变量可以是一个具有NULLC级别的变量NULL由于这个原因,Tcl语言本身根本不支持值;它们对应于不存在.)