Tcl 8.0版提供了命名空间(namespace),在引入名称空间之前,只有一个全局范围。现在有了名称空间,无涯教程有了全局范围的其他空间。
命名空间是使用 namespace 命令创建的,创建命名空间的简单示例如下所示-
#!/usr/bin/tclsh namespace eval MyMath { # 在命名空间内创建一个变量 variable myResult } # 在命名空间内创建过程 proc MyMath::Add {a b } { set ::MyMath::myResult [expr $a + $b] } MyMath::Add 10 23 puts $::MyMath::myResult
执行以上代码后,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/tcl-tk/tcl-namespaces.html
来源:LearnFk无涯教程网
33
Tcl允许嵌套名称空间。下面给出了嵌套名称空间的简单示例-
#!/usr/bin/tclsh namespace eval MyMath { # 在命名空间内创建一个变量 variable myResult } namespace eval extendedMath { # 在命名空间内创建一个变量 namespace eval MyMath { # 在命名空间内创建一个变量 variable myResult } } set ::MyMath::myResult "test1" puts $::MyMath::myResult set ::extendedMath::MyMath::myResult "test2" puts $::extendedMath::MyMath::myResult
执行以上代码后,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/tcl-tk/tcl-namespaces.html
来源:LearnFk无涯教程网
test1
test2
您可以在前面的命名空间示例中看到,无涯教程使用了很多作用域解析运算符,并且使用起来更加复杂。可以通过导入和导出名称空间来避免这种情况。
#!/usr/bin/tclsh namespace eval MyMath { # 在命名空间内创建一个变量 variable myResult namespace export Add } # 在命名空间内创建过程 proc MyMath::Add {a b } { return [expr $a + $b] } namespace import MyMath::* puts [Add 10 30]
执行以上代码后,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/tcl-tk/tcl-namespaces.html
来源:LearnFk无涯教程网
40
您可以使用 forget 子命令删除导入的名称空间。一个简单的例子如下所示-
#!/usr/bin/tclsh namespace eval MyMath { # 在命名空间内创建一个变量 variable myResult namespace export Add } # 在命名空间内创建过程 proc MyMath::Add {a b } { return [expr $a + $b] } namespace import MyMath::* puts [Add 10 30] namespace forget MyMath::*
执行以上代码后,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/tcl-tk/tcl-namespaces.html
来源:LearnFk无涯教程网
40
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)