我在TCL中看到了一些这样的代码:
namespace eval ::info {
set count 0;
set id 1;
set role admin;
namespace export *
}
proc ::info::setcount {
set ::info::count 0;
}
proc ::info::setId {
set ::info::id 1;
}
proc ::info::setRole {
set ::info::role user;
}
Run Code Online (Sandbox Code Playgroud)
在命名空间:: info中定义了三个变量,但是在命名空间中未声明三个procs(setcount setId setRole),好像它们是在:: info之外定义的,是否允许?这是如何运作的?
这些过程在名称空间中定义::info。它们只是不在的范围之内namespace eval,该命令仅在必要时创建名称空间,然后在该上下文中执行给定脚本。在名称空间的上下文中执行将更改proc当这些命令的名称不完全合格时放置其创建的命令的方式。命名空间独立于namespace eval调用而存在。但是必须在命名空间中声明变量;这样可以避免在解析变量时遇到一些麻烦,因为这些变量可能会吸引人。
就个人而言,我更喜欢这样编写代码:
namespace eval ::foo {
proc bar ... {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是我知道其他人不同意我。写下您喜欢的内容,因为Tcl在任何一种方案下都可以正常工作。
| 归档时间: |
|
| 查看次数: |
4262 次 |
| 最近记录: |