为什么我不能在Tcl的交互模式中使用`w`作为`while`?

时间:2014-02-11 23:54:42

标签: tcl

为什么我不能在Tcl的交互模式中将w用于while?只有wh似乎有效:

info script {}
set tcl_interactive 1
set i 0
wh {$i<10} {puts [incr i]}

(见Ideone.com demo。)

w在命令和过程的集合中似乎非常明确:

puts [lsort [concat [info commands] [info procs]]]
  

追加后应用数组auto_execok auto_execok auto_import auto_import auto_load auto_load auto_load_index auto_load_index auto_qualify auto_qualify binary break case catch cd chan clock clock close concat continue dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent flush for foreach format gets glob global if if incr info interp join lappend lassign lindex linsert list llength load lrange lrepeat lreplace lreverse lsearch lset lsort namespace打开包pid proc put pwd read regexp regsub rename return scan seek set socket source split string subst switch tclLog tclLog tell time trace unknown unknown unload unset update uplevel upvar

时变量vwait

这个问题,就像我刚才提到的另一个问题一样,纯粹是抽象的 - 我注意到这种奇怪的行为,而代码打高尔夫球,并希望更好地理解内部结构。

1 个答案:

答案 0 :(得分:1)

您不能将w用于while,因为Tcl在您的路径上找到了一个名为w的程序(可能是/usr/bin/w完整的)并且它支持完全匹配Tcl命令的前缀匹配。

你可能不应该相当这么懒惰; wh应该有效。 (现在。没有承诺在所有我们将来不会添加更多命令,最终导致问题。)

% info commands w*
while
% w 1 {puts hi;break}
 0:02  up 89 days, 14:58, 12 users, load averages: 0.46 0.62 0.73
USER     TTY      FROM              LOGIN@  IDLE WHAT
% auto_execok w
/usr/bin/w
% wh 1 {puts hi;break}
hi