以下に示すように、一連のプロシージャと名前空間があります。
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
}
名前空間について何かが欠けているのではないかと思います。ドキュメントを読んでみましたが、実際にどのように機能するのかよくわかりません。