返回所有命令的TCL过程,例行过程[关闭]

问题描述 投票:-2回答:1

我发现了一种Tcl语言练习:

编写一个过程,该过程返回调用者可见的所有非过程命令。

所以经过几次尝试后,我以这段代码结束了:

proc aaaaaaaaaa {} { set var 1} ; # name is not important

proc only_commands {} {
set rawList [info commands]
set procList [info proc]

foreach a $procList {
    set pos [lsearch $rawList $a]
    lreplace $rawList $pos $pos
}
return $rawList
}

puts [ only_commands ]

在此代码中,我得到了两个列表:一个命令(包括过程)和一个唯一的过程。现在,我使用了一个foreach循环来获取element在命令列表并将其替换为空。最后,我返回了列表。

但是,当我打印列表时,我也看到了过程“ aaaaaaaaaa”。

tell socket subst open eof pwd glob list pid exec auto_load_index time 
unknown eval lassign lrange fblocked lsearch auto_import gets case lappend 
proc throw break variable llength auto_execok return linsert error catch 
clock info split array if fconfigure coroutine concat join lreplace source 
fcopy global switch auto_qualify update close cd for auto_load file append 
lreverse format lmap only_commands unload read package set namespace binary 
scan apply trace seek zlib while chan flush after vwait dict uplevel continue
 try foreach lset rename aaaaaaaaaa fileevent yieldto regexp lrepeat upvar
 tailcall encoding expr unset load regsub interp exit puts incr lindex lsort
 tclLog string yield

为什么在那儿?有人可以向我解释问题出在哪里吗?

function tcl
1个回答
1
投票
lreplace $rawList $pos $pos

lreplace documentation(添加了强调):

lreplace 返回新列表通过替换...]形成的

您对返回的新列表不做任何事情。尝试将该行更改为

lreplace
© www.soinside.com 2019 - 2024. All rights reserved.