如何通过引用传递不接受新参数的函数?

时间:2016-08-06 20:40:02

标签: tcl ns2

我需要在test内修改名为process_data的参数,并根据test值切换该函数外的个案。

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

代码:

set test "0"

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

// switch cases depending on test value.

1 个答案:

答案 0 :(得分:1)

如果您知道要转换为别名的变量的名称,则不需要额外的参数来使用upvar。你应该可以做其中任何一个(同时使用):

global test
upvar #0 test test

它不是真正的经典模块化编程,但它会起作用。

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

Agent/UDP instproc process_data {size data} {
    global test
    # some stuff
}

如果您使用upvar #0 test test(这两个命令基本相同),则相同。

文档: globalupvar