访问在不同名称空间中打开的文件处理程序

时间:2018-08-23 13:18:25

标签: tcl

如何访问/关闭在不同名称空间中打开的文件处理程序?

示例:

package provide MyProcs 1.0

namespace eval ::MyProcs {
# Export commands
namespace export run_my_proc
}

proc ::MyProcs::run_my_proc {log} {

    global log_fh
    set log_fh [open "log" "r"]

}

可执行文件代码:

lappend auto_path /path/to/my/package
package require ::MyProcs 1.0

MyProcs::run_my_proc "some_file_name"

close MyProcs::${log_fh}

然后收到此错误:

原始错误:找不到名为“ MyProcs :: log_fh”的频道

1 个答案:

答案 0 :(得分:3)

在声明global log_fh时,global命令指定log_fh在全局名称空间中,而不是在您的名称空间中。有两种方法可以解决此问题:

指定名称空间:

 global ::MyProcs::log_fh

使用variable命令(用于创建和初始化名称空间变量):

 namespace eval ::MyProcs {
    variable log_fh
    ...
 }

 proc ::MyProcs::run { } {
    variable log_fh
    ...
 }

引用:variableglobal