我试图在服务器脚本的TCL wiki中使用这个例子:
# Initialise the state
after 5000 set state timeout
set server [socket -server accept 12345]
proc accept {args} {
global state connectionInfo
set state accepted
set connectionInfo $args
}
# Wait for something to happen
vwait state
# Clean up events that could have happened
close $server
after cancel set state timeout
# Do something based on how the vwait finished...
switch $state {
timeout {
puts "no connection on port 12345"
}
accepted {
puts "connection: $connectionInfo"
puts [lindex $connectionInfo 0] "Hello there!"
}
}
我希望在clinet打开一个套接字与服务器一次后,vwait循环将完成并继续运行,万一它失败我将有一个超时。所以很好。 由于某种原因问题开始,我得到$ state的错误,并且无法将其作为带脚本的函数运行。 我得到的错误是:无法读取“状态”:没有这样的变量。运行它不是一个功能正常工作,我不明白为什么。 任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
该代码有效,但仅在全局上下文中进行评估;我想你正试图在程序中运行它。发生的事情是switch
调用查找局部变量state
而不是全局变量state
,但找不到它,而vwait
总是使用全局变量并且after
回调在全局范围内进行评估。
修复是替换
switch $state {
与
switch $::state {
假设您对使用该变量感到满意。