初识Tcl(十一):Tcl 命名空间

举报
李锐博恩 发表于 2021/07/15 04:44:21 2021/07/15
【摘要】 目录 创建命名空间 嵌套的命名空间 导入和导出空间 忘记命名空间 名称空间是一个容器组标识符,用于组变量和程序。命名空间可从Tcl 8.0版开始使用。引入命名空间之前,有一个全局范围。现在有了命名空间,我们可以分区全局范围。 创建命名空间 使用命名空间命令创建命名空间。一个简单的例子,创建命名空间如下图所示 #!/usr/bin/tclsh namespa...

目录

创建命名空间

嵌套的命名空间

导入和导出空间

忘记命名空间


名称空间是一个容器组标识符,用于组变量和程序。命名空间可从Tcl 8.0版开始使用。引入命名空间之前,有一个全局范围。现在有了命名空间,我们可以分区全局范围。

创建命名空间

使用命名空间命令创建命名空间。一个简单的例子,创建命名空间如下图所示

#!/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

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/85216770

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。