
- Tcl 教程
- Tcl - 首頁
- Tcl - 概述
- Tcl - 環境設定
- Tcl - 特殊變數
- Tcl - 基本語法
- Tcl - 命令
- Tcl - 資料型別
- Tcl - 變數
- Tcl - 運算子
- Tcl - 決策
- Tcl - 迴圈
- Tcl - 陣列
- Tcl - 字串
- Tcl - 列表
- Tcl - 字典
- Tcl - 過程
- Tcl - 包
- Tcl - 名稱空間
- Tcl - 檔案 I/O
- Tcl - 錯誤處理
- Tcl - 內建函式
- Tcl - 正則表示式
- Tk 教程
- Tk - 概述
- Tk - 環境
- Tk - 特殊變數
- Tk - 小部件概述
- Tk - 基本小部件
- Tk - 佈局小部件
- Tk - 選擇小部件
- Tk - 畫布小部件
- Tk - Mega 小部件
- Tk - 字型
- Tk - 圖片
- Tk - 事件
- Tk - 視窗管理器
- Tk - 幾何管理器
- Tcl/Tk 有用資源
- Tcl/Tk - 快速指南
- Tcl/Tk - 有用資源
- Tcl/Tk - 討論
Tcl - 名稱空間
名稱空間是用於分組變數和過程的一組識別符號的容器。名稱空間從 Tcl 8.0 版本開始可用。在引入名稱空間之前,只有一個全域性作用域。現在有了名稱空間,我們有了全域性作用域的額外分割槽。
建立名稱空間
使用namespace命令建立名稱空間。下面顯示了一個建立名稱空間的簡單示例:
#!/usr/bin/tclsh namespace eval MyMath { # Create a variable inside the namespace variable myResult } # Create procedures inside the namespace proc MyMath::Add {a b } { set ::MyMath::myResult [expr $a + $b] } MyMath::Add 10 23 puts $::MyMath::myResult
執行上述程式碼時,會產生以下結果:
33
在上面的程式中,您可以看到有一個名稱空間包含一個變數myResult和一個過程Add。這使得在不同的名稱空間下建立同名變數和過程成為可能。
巢狀名稱空間
Tcl 允許巢狀名稱空間。下面給出了一個巢狀名稱空間的簡單示例:
#!/usr/bin/tclsh namespace eval MyMath { # Create a variable inside the namespace variable myResult } namespace eval extendedMath { # Create a variable inside the namespace namespace eval MyMath { # Create a variable inside the namespace variable myResult } } set ::MyMath::myResult "test1" puts $::MyMath::myResult set ::extendedMath::MyMath::myResult "test2" puts $::extendedMath::MyMath::myResult
執行上述程式碼時,會產生以下結果:
test1 test2
匯入和匯出名稱空間
您可以在之前的名稱空間示例中看到,我們使用了大量的範圍解析運算子,使用起來比較複雜。我們可以透過匯入和匯出名稱空間來避免這種情況。下面給出了一個示例:
#!/usr/bin/tclsh namespace eval MyMath { # Create a variable inside the namespace variable myResult namespace export Add } # Create procedures inside the namespace proc MyMath::Add {a b } { return [expr $a + $b] } namespace import MyMath::* puts [Add 10 30]
執行上述程式碼時,會產生以下結果:
40
忘記名稱空間
您可以使用forget子命令刪除匯入的名稱空間。下面顯示了一個簡單的示例:
#!/usr/bin/tclsh namespace eval MyMath { # Create a variable inside the namespace variable myResult namespace export Add } # Create procedures inside the namespace proc MyMath::Add {a b } { return [expr $a + $b] } namespace import MyMath::* puts [Add 10 30] namespace forget MyMath::*
執行上述程式碼時,會產生以下結果:
40
廣告