我有一组 procs 和一个命名空间,如下所示:
namespace eval ::_API {
if {[info exists ::_API::API_ids]} {
catch {API erase -ids [array names ::_API::API_ids]}
}
catch {unset API_ids}
array set API_ids ""
}
proc ::_API::erase { } {
foreach id [array names ::_API::API_ids] {
if {::_API::API_ids($id) == 0} {
continue
}
if {[catch {API -id $id -redraw 0}] != 0} {
set ::_API::API_ids($id) 0
}
}
Redraw ;# I'm not concerned about this part
# and I'm fairly certain it can be ignored
}
proc erase { } {
::_API ::erase
}
::_API::API_ids
是一个包含点的数组(例如0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
)。该脚本所做的是擦除表格中的点。
我想将命名空间::_API
转换为 proc,以便我可以使用 GUI 按钮来调用 proc。它目前直接在其他一些脚本(映射表中的点)之后,我只想在需要时删除它们;即何时按下按钮。
我已经尝试过::_API::erase
直接运行,但它不起作用:
proc ::_API::erase { } {
foreach id [array names ::_API::API_ids] {
if {::_API::API_ids($id) == 0} {
continue
}
if {[catch {API -id $id -redraw 0}] != 0} {
set ::_API::API_ids($id) 0
}
}
Redraw
}
我认为命名空间可能缺少一些东西。我尝试阅读文档,但我不太了解它们是如何工作的。