Sujet : Re: tcl hidden "cruelties"
De : rich (at) *nospam* example.invalid (Rich)
Groupes : comp.lang.tclDate : 14. Oct 2024, 02:44:31
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <veht1v$t9io$1@dont-email.me>
References : 1
User-Agent : tin/2.6.1-20211226 ("Convalmore") (Linux/5.15.139 (x86_64))
aotto1968 <
aotto1968@t-online.de> wrote:
Regardless of "broken code", TCL itself has some cruelties in its
syntax. Here, for example, the storage of an "array" with a
namespace path, which in TCL always has !! TWO !! commands. ONE
command to generate the namespace and ONE command to finally generate
the array.
namespace eval ::funcDEF::MkErrN {}
array set ::funcDEF::MkErrN::my {
RETURN_MAPPING {}
...
}
This is Tcl. If something is that bothersome, just morph the language
to be the way you want it to work. I.e.:
proc ns-array-set {fullvarname contents} {
namespace eval [namespace qualifiers $fullvarname] {}
array set $fullvarname $contents
}
Create that once, then use it, instead of plain "array set" whenever
you want to create a namespace, and then set an array within, i.e.:
% ns-array-set abc::pdq::xyz [list a 1 b 2 c 3]
Which has now, in a single command, created the parent namespaces, and
the array variable therein:
% info exists abc::pdq::xyz
1
% parray abc::pdq::xyz
abc::pdq::xyz(a) = 1
abc::pdq::xyz(b) = 2
abc::pdq::xyz(c) = 3
%
And, given that the 'array' command is itself a namespace ensemble, you
could extend the 'array' ensemble to add a "ns-set" (or whatever name
you like) to the ensemble that performs the above "create ns - and
init" of a namespace variable, then you could do
"array ns-set [list a 1 b 2]"
in your code to replace the two commands.