Re: tcl hidden "cruelties"

Liste des GroupesRevenir à cl tcl 
Sujet : Re: tcl hidden "cruelties"
De : aotto1968 (at) *nospam* t-online.de (aotto1968)
Groupes : comp.lang.tcl
Date : 14. Oct 2024, 08:41:04
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <veihug$13uq8$1@dont-email.me>
References : 1 2
User-Agent : Mozilla Thunderbird
On 14.10.24 03:44, Rich wrote:
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.
 
your hint with the "ensemble" feature was good but missing the required code.
to "extend" an ensemble is quite complicate in TCL… follow the code below:
proc ::array-ns-set {fullvarname contents} {
   namespace eval [namespace qualifiers $fullvarname] {}
   array set $fullvarname $contents
}
namespace ensemble configure array -map [dict replace \
   [namespace ensemble configure array -map] ns-set ::array-ns-set]
array ns-set ::x::my [list a 1 b 2]
parray ::x::my
1) but the CORE problem is not solved, for every "namespace ns-set ..." command TWO commands
are executed just to avoid FIRST namespace missing error.
→ (ALL pay runtime-speed just for FIRST benefit)
2) the syntax to extend an existing ensemble is still very "ugly.."
improvement:
 > 1. namespace ensemble add     array ns-set ::array-ns-set
 > 2. namespace ensemble delete  array ns-set

Date Sujet#  Auteur
10 Oct 24 * tcl hidden "cruelties"12aotto1968
11 Oct 24 +- Re: tcl hidden "cruelties"1Ralf Fassel
11 Oct 24 +- Re: tcl hidden "cruelties"1Alan Grunwald
12 Oct 24 +* Re: tcl hidden "cruelties"3aotto1968
12 Oct 24 i`* Re: tcl hidden "cruelties"2Ralf Fassel
13 Oct 24 i `- Re: tcl hidden "cruelties"1aotto1968
13 Oct 24 +* Re: tcl hidden "cruelties"2aotto1968
20 Oct 24 i`- Re: tcl hidden "cruelties"1aotto1968
14 Oct 24 `* Re: tcl hidden "cruelties"4Rich
14 Oct 24  `* Re: tcl hidden "cruelties"3aotto1968
14 Oct 24   +- Re: tcl hidden "cruelties"1et99
14 Oct 24   `- Re: tcl hidden "cruelties"1Rich

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal