- 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
广告