gpt4 book ai didi

tcl - 循环中的基本 TCL 变量取消引用

转载 作者:行者123 更新时间:2023-12-03 03:40:20 29 4
gpt4 key购买 nike

我有一个看起来像这样的循环:

foreach x {a b} {
set type_$x [some_function_here]
set N_$x [function type_$x]
}

问题是我想在第二行取消引用 type_$a 并将其值用作函数参数。

无论如何:

set N_$x [function $type_$x]

不起作用,我用 subst 命令尝试的任何其他组合也不起作用。

如何解决这个问题?

最佳答案

三种可能性,按照我认为您应该更喜欢它们的程度排列。

数组

到目前为止,最简单的技术是使用数组:

foreach x {a b} {
set type($x) [some_function_here]
set N($x) [function $type($x)]
}

这确实改变了程序的其余部分看待事物的方式,因此它不是一种零影响技术,但它非常简单;我认为这是最推荐的方法。

本地别名

或者,使用 upvar 0 为变量命名的变量创建本地别名:

foreach x {a b} {
upvar 0 type_$x typex N_$x Nx
set typex [some_function_here]
set Nx [function $typex]
}

在内部,名称只是解析为相同的存储单元,因此这是一种有效的技术(尽管 upvar 0 非常棘手!)

单参数设置

最后,您可以使用带有一个参数的set命令来读取任意命名的变量; $ 语法可以说只是语法糖。

foreach x {a b} {
set type_$x [some_function_here]
set N_$x [function [set type_$x]]
}

如果您经常这样做,通常会有点代码味道,并且通常表明您应该使用数组。

关于tcl - 循环中的基本 TCL 变量取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29843113/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com