namespace eval
コマンド_
- 名前空間が存在しない場合は作成します
- その名前空間内から提供されたコードを実行します
名前空間内から定義された proc (デフォルトの名前空間は :: であるため、すべての proc です)
- 絶対名前空間が前にある場合、指定された名前空間でそのコマンドを定義します
- 相対ネームスペースが前にある場合、現在のネームスペースを基準にしてそのコマンドを定義します
そのような
namespace eval bob {
namespace eval joe {
proc proc1 {} {}
}
proc proc2 {} {}
proc ::proc3 {} {}
proc joe::proc4 {} {}
}
proc proc5 {} {}
proc bob::joe::proc6 {} {}
proc ::bob::joe::proc7 {} {}
次のコマンドが存在します
::bob::joe::proc1
::bob::proc2
::proc3
::bob::joe::proc4
::proc5
::bob::joe::proc6
::bob::joe::proc7
グローバル名前空間から呼び出された場合、グローバル名前空間のコマンドの前に a を付けても付けなくてもよいことに注意して::
ください。同じことが、どの名前空間のコマンドにも当てはまります。
namespace eval bob {
proc2 ;# calls ::bob::proc2
::proc5 ;# calls ::proc5 (proc5 in the global namespace)
joe::proc4 ;# calls ::bob::joe::proc4
}
生のコマンド名 (名前空間修飾子がまったくない) は、現在の名前空間を検索し、そこにコマンドが見つからない場合はグローバル名前空間を検索することに注意してください。
namespace eval bob {
proc5 ;# calls ::proc5 since there is no ::bob::proc5
}