首页
编程语言

分类

当前位置: 云海天教程网 > 技术新闻 > 编程语言 >正文

[ Tcl ] 如何实现类似 Perl 中 shift 函数的效果

更新时间:2023-02-05  作者:佚名   来源: 网络转载

[ Tcl ] 如何实现类似 Perl 中 shift 函数的效果

https://www.cnblogs.com/yeungchie/

函数功能

Perl 中 shift 函数可以返回列表的第一个元素,并将后续所有元素向前移位( 索引值减 1 )。输入可选,默认为 @_ 或者 @ARGV

my @foo  = qw( 1 2 3 4 );
say shift @foo;
# 1
say @foo;
# 234

在某些版本的 Tcl 中函数 lshift 可以实现类似效果,或者使用 struct::list 包:

package require struct::list
set foo { 1 2 3 4 }
puts [::struct::list shift foo]
# 1
puts $foo
# 2 3 4

但某些 EDA 工具中内置的 Tcl 版本较旧,或者做了精简,无法使用上面提到的方法,所以下面自己来实现一下。

Tcl 实现

proc shift { sym } {
    upvar 1 $sym foo
    if { ! [info exists foo] } {
        error "can"t read "$sym": no such variable"
    }
    set foo [lassign $foo[unset foo] var0]
    return $var0
}

测试

列表迭代

set a {3 1 2 5 4}
# 3 1 2 5 4
shift a
# 3
shift a
# 1
puts $a
# 2 5 4

循环中应用

set a {1 2 {} 4 {}}
# 1 2 {} 4 {}
while { [llength $a] } {
    puts [shift a]
}
# 1
# 2
# 
# 4
# 
上一篇:关于虚函数实现多态的原理及分析 下一篇:Eureka注册中心
小编推荐
快速导航更多>>
JavaScript 教程 HTML5 教程 CSS3 教程 jQuery 教程 Vue.js 教程 Node.js 教程 SQL 教程 C 教程 PHP 教程 Linux 教程 Docker 教程 Nginx 教程 Python 教程 Java 教程

云海天教程网 版权所有

 陕公网安备 61050202000585号

陕ICP备14013131号-3