如何在TCL的proc中输出数组元素时显示原数组名称?
TCL数组遍历输出显示原数组名的解决方法
你的问题出在puts语句里硬编码了arr这个内部别名,没有使用传入的原始数组名参数。只需要将输出中的arr替换为参数$array_input即可实现期望效果。
修改后的proc代码:
proc array_values {array_input} { upvar $array_input arr foreach name [lsort [array names arr]] {puts "$array_input($name) : $arr($name)"} }
调用array_values CMN_CLK_DIG_PATH后,输出将变为:
CMN_CLK_DIG_PATH(0) : u_sm/u_sm_n/u_sm_ph/u_chip/Icmn0/ CMN_CLK_DIG_PATH(1) : u_sm/u_sm_n/u_sm_ph/u_chip/Icmn1/
说明
upvar命令只是把外部数组映射到proc内部的arr别名,方便你在proc内操作数组元素。但你需要输出的是用户实际传入的数组名称,也就是array_input参数的取值,因此直接在输出字符串中使用$array_input就能显示原数组名。
内容的提问来源于stack exchange,提问作者J.S
相关产品推荐
相关产品推荐

