Posted to tcl by stu at Mon Jan 10 13:45:42 GMT 2022view pretty
$ cat nsy.tcl
namespace eval main {
namespace eval module_a {
proc openModule {args} { return open:$args }
proc closeModule {args} { return close:$args }
proc module_a {args} {
namespace path [namespace parent]
set me [namespace tail [lindex [info level 0] 0]]
namespace ensemble create -prefixes no -command $me \
-map [dict create open openModule close closeModule]
rename $me _$me
# Module-specific initialization begin
# put code here
# Module-specific initialization end
tailcall $me {*}$args
}
namespace export module_a
}
namespace import module_a::*
}
$ tclsh
% source nsy.tcl
% namespace eval main { list [module_a open a b c] [module_a close 1 2 3] [module_a open x y z] }
{open:a b c} {close:1 2 3} {open:x y z}
$ tclsh
% source nsy.tcl
% list [main::module_a open a b c] [main::module_a close 1 2 3] [main::module_a open x y z]
{open:a b c} {close:1 2 3} {open:x y z}
$ tclsh
% source nsy.tcl
% main::module_a z
unknown subcommand "z": must be close, or open