TCL中的列表和数组

本打算利用列表进行传参,其实列表也是可以作为参数进行proc传递的,但是我要传入的参数是个变化的值。如下有过程

#输出列表中的第num - 1 个元素   list 是一个列表
proc print {list  num} {
    puts [lindex $list [expr $num - 1]]
}

foreach i {2 3} {
    set aa [print {5 6 7 $i} 4]
}

我想获得的结果是2和3,但是结果却是 $i
查阅资料才知道大括号中的特殊符号都是不起作用的

在tcl中  大括号提供了更加彻底的引用形式,它会取消其他所有特殊字符的特殊意义。如果一个单词以左大括号开头,那么知道与它配对的右大括号为止,所有字符都被原封不动的标识为这个单词的值,这个单词不会发生任何替换,所有的空格、制表符、换行符以及分号包括$ [ ] 都作为普通的字符处理。

注意:在大括号中会执行替换的唯一形式是反斜杠-换行符序列。但是这一替换实际上是在解析命令之前进行的。 \n


这种方式行不通了,就用其他方式吧,我就想着利用数组进行传递。

但是tcl中的数组 不可以作为proc的参数,也不可以作为返回值

可以利用两种方法解决:

    1、利用namespace或者upvar 把数组声明在函数外面,成为全局的数组。

    2、利用list进行中间过渡进行传递。

下面我主要写一下第二种方式

同样,还是输出最后的一个xx,api保持不变

proc print {list  num} {
    array set value $ list
   puts $value([expr $num - 1])
}

foreach i {2 3} {
    array set  my_array [list 0 5 1 6 2 7 3 $i]
    set aa [print [array get my_array *] 4]
}
这样在传参之前,先把数组下标和值统一转化为列表,然后再进行传递,传递完之后再转换回来使用,于是就得到想要的结果了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值