Re: Parsing namespace name strings

Liste des GroupesRevenir à cl tcl 
Sujet : Re: Parsing namespace name strings
De : emiliano (at) *nospam* example.invalid (Emiliano)
Groupes : comp.lang.tcl
Date : 30. Nov 2024, 00:16:01
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20241129201601.dde7fad0c89a3239a0ae6b8a@example.invalid>
References : 1
User-Agent : Sylpheed 3.5.1 (GTK+ 2.24.32; i686-pc-linux-gnu)
On Fri, 29 Nov 2024 21:03:25 +0000
Alan Grunwald <nospam.nurdglaw@gmail.com> wrote:

I find I regularly want to know things like "what is first part of a
namespace name", "the first two parts" etc. I generally want to get the
same answer whether the name is a::b::c or ::a::b::c.
 
I can (and do) do this by getting a list of parts via something like
 
split [string map {"::" ":"} $name] ":"
 
but this is clunky - is there something like [namespace split] that
would return a list of parts?
 
For example, I'd like namespace split a::b::c to return {a b c}, and
namespace split ::d::e::f::g to return {d e f g}.

Easy combining [namespace tail] and [namespace qualifiers]:

proc ns2list {ns} {
  set l {}
  while {$ns ne {}} {
    lappend l [namespace tail $ns]
    set ns [namespace qualifiers $ns]
  }
  lreverse $l
}

% ns2list foo::bar::
foo bar {}
% ns2list foo::bar
foo bar
% ns2list ::::foo::bar::
foo bar {}
% ns2list ::foo::bar
foo bar
% ns2list {}
%

 
As a followup, if I write a proc namespaceSplit that does what I want,
is there a user-level way to modify the [namespace] command so that a
can execute namespaceSplit via [namespace split]?

Since the [namespace] command is an ensemble, its easy to add a subcommand

% namespace ensemble configure namespace -map [dict merge [namespace ensemble configure namespace -map] {split ::ns2list}]
% namespace split ::foo::bar::baz
foo bar baz

 
Many thanks

Regards
--
Emiliano

Date Sujet#  Auteur
29 Nov 24 * Parsing namespace name strings3Alan Grunwald
30 Nov 24 `* Re: Parsing namespace name strings2Emiliano
30 Nov 24  `- Re: Parsing namespace name strings1Alan Grunwald

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal