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

How to pass by reference to function that won't accept new arguments?

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

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

代码:

set test "0"

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

// switch cases depending on test value.

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

global test
upvar #0 test test

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

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

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

如果你使用 upvar #0 test test 也是一样(这两个命令基本上是等价的)。

文档: global, upvar