如何在tcl名称空间中定义proc

2 namespaces tcl proc

我在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之外定义的,是否允许?这是如何运作的?

Don*_*ows 5

这些过程在名称空间定义::info。它们只是不在的范围之内namespace eval,该命令仅在必要时创建名称空间,然后在该上下文中执行给定脚本。在名称空间的上下文中执行将更改proc当这些命令的名称不完全合格时放置其创建的命令的方式。命名空间独立于namespace eval调用而存在。但是必须在命名空间中声明变量;这样可以避免在解析变量时遇到一些麻烦,因为这些变量可能会吸引人。

就个人而言,我更喜欢这样编写代码:

namespace eval ::foo {
    proc bar ... {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我知道其他人不同意我。写下您喜欢的内容,因为Tcl在任何一种方案下都可以正常工作。