Как можно настроить передачу пространства имен между объектами TclOO?
В частности, в приведенном ниже примере:
runner
объект должен экспортировать пространство имен своего метода в виде команд - и
invoker
объект должен импортировать runner
пространство имен для использования в качестве DSL
Следующий пример в Tcl 8.6:
#!/usr/bin/env tclsh
namespace eval ::runner {
::oo::class create Runner {
constructor {} {
namespace export RUN
puts "runner.export: [namespace export]"
}
method RUN {} {
puts "runner.RUN"
}
}
}
namespace eval ::invoker {
::oo::class create Invoker {
variable runner
constructor {} {
set runner [::runner::Runner new]
set runnerNS [info object namespace $runner]
namespace import ${runnerNS}::*
puts "invoker.import: [namespace import]"
}
method process {} {
puts "invoker.process: [RUN]"
}
}
}
set invoker [::invoker::Invoker new]
$invoker process
Выдает эту ошибку:
runner.export: RUN
invoker.import:
invalid command name "RUN"
while executing
"RUN"
(class "::invoker::Invoker" method "process" line 2)