我是TCL编程的新手。有人可以指导我访问被调用过程中的结构变量(SAV_DATA)吗?
struct_typedef XYZ {struct
{ulong a}
{ulong b}
}
proc SET_DATA {} {
struct_new x XYZ
set x(a) 1
set x(b) 2
SAV_DATA x
}
proc SAV_DATA {ARG1} {
//How do i access the structure variables in this procedure
}
答案 0 :(得分:2)
struct_typedef必须是代码中其他位置定义的过程。还有struct_new。如果它是公共库,您还需要包含该功能或链接到它的来源。如果找不到该功能,info body struct_typedef
会有所帮助。但是,很可能它只是定义了一个Tcl数组,因此struct_new x XYZ
可能将x
设置为数组。在这种情况下,当您调用SAV_DATA时,您将数组 name 传递给ARG1。检查内容的最简单方法通常是upvar数组:
proc SAV_DATA {varname} {
upvar $varname x
puts $x(a)
puts $x(b)
}
upvar
调用将使局部变量x
引用父过程上下文中的命名变量 - 因此我们可以让C ++程序员在调用者上下文中调用对该数组的引用。 / p>
如果我们不使用upvar,那么你必须先扩展变量名,然后访问数组元素。这样的代码如下所示:
proc SAV_DATA {varname} {
puts [set [set varname](a)]
puts [set [set varname](b)]
}