小编Mar*_*nte的帖子

命名空间内的TclOO类:调用命名空间procs给出错误

我正在用Tcl8.6和Rivet对TclOO进行一些实验,但是我遇到了麻烦,因为我无法按照自己的意愿行事.

问题可以通过.rvt文件中的以下代码简单地重现:

<?

proc dumbproc {} {
    puts "this is dumbproc ([namespace current])"
}

oo::class create foo {
    method bar {} {
        puts "this is bar ([namespace current])"
        dumbproc
    }
}

set obj [foo new]

dumbproc

$obj bar
Run Code Online (Sandbox Code Playgroud)

如果我只是查看代码,它似乎应该按预期工作,但它确实没有,因为Rivet包的细微行为和特定配置选择.

在这个例子中,我使用的是一个.rvt代码在::request命名空间内执行的文件,因此该dumbproc过程的完全限定名称是::request::dumbproc.当在bar方法内部调用名称解析算法时,它会搜索dumbproc内部::oo::Obj12,然后进入::oo,最后进入::,而不会找到它并给出以下错误.

this is dumbproc (::request) this is bar (::oo::Obj16)

invalid command name "dumbproc"
    while executing
"dumbproc"
    (class "::request::foo" method "bar" line …
Run Code Online (Sandbox Code Playgroud)

tcl

3
推荐指数
1
解决办法
1121
查看次数

标签 统计

tcl ×1