Tcl 如何通过引用传递给赢得';你不接受新的论点吗?

Tcl 如何通过引用传递给赢得';你不接受新的论点吗?,tcl,ns2,Tcl,Ns2,我需要修改名为test的参数insideprocess_data并根据test值在该函数之外切换案例 我无法使用upvar通过引用传递它,因为process\u data表示用于处理接收到的udp数据包的静态函数,并且它不会接受两个以上的参数“size和data”。 另外,据我所知,process\u data函数没有返回值 代码: set test "0" Agent/UDP instproc process_data {size data} { //some stuff

我需要修改名为
test
的参数inside
process_data
并根据
test
值在该函数之外切换案例

我无法使用
upvar
通过引用传递它,因为
process\u data
表示用于处理接收到的udp数据包的静态函数,并且它不会接受两个以上的参数“size和data”。
另外,据我所知,
process\u data
函数没有返回值

代码:

set test "0"

Agent/UDP instproc process_data {size data} {
     //some stuff
     if (...)
        set test "1"
}

// switch cases depending on test value.

如果知道要使用别名的变量的名称,则不需要额外的参数来使用
upvar
。您应该能够执行以下任一操作(不要同时使用这两个操作):

这并不是真正的经典模块化编程,但它可以工作

放置命令的好位置是在过程体的开头,如下所示:

Agent/UDP instproc process_data {size data} {
    global test
    # some stuff
}
如果您使用
upvar#0 test test
(这两个命令基本上是等效的),情况也是一样的

文件: ,

我不是tcl编码方面的专家,因此请您编辑您的答案,以便更具体地将每个答案放在哪里,如果您愿意,请使用我的示例。感谢Side
process\u data
,我可以随意更改
test
,但是在
process\u data
外部,它保持为“0”,因为我在开始时就设置了它。@EmadAldeen:外部
test
是在名称空间中声明的还是在全局范围之外的其他范围中声明的?
test
是在全局范围中声明的,我需要类似于
process\u data
@EmadAldeen中的“返回值”的东西:如果使用
global test
,则过程外部的
test
变量将与内部的
test
变量具有相同的值。这里有些不对劲。您可以编辑您的问题以显示更多代码吗?
Agent/UDP instproc process_data {size data} {
    global test
    # some stuff
}