我正在用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 ×1