Deutsch English Français Italiano |
<20241129201601.dde7fad0c89a3239a0ae6b8a@example.invalid> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.misty.com!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Emiliano <emiliano@example.invalid> Newsgroups: comp.lang.tcl Subject: Re: Parsing namespace name strings Date: Fri, 29 Nov 2024 20:16:01 -0300 Organization: A noiseless patient Spider Lines: 56 Message-ID: <20241129201601.dde7fad0c89a3239a0ae6b8a@example.invalid> References: <vida8m$186cp$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Injection-Date: Sat, 30 Nov 2024 00:16:03 +0100 (CET) Injection-Info: dont-email.me; posting-host="9d1ba3a732f9551777d5f906e292bc55"; logging-data="1356397"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+ElSyV+CH8JhVUr9PBnzy40rXBrwApc1k=" Cancel-Lock: sha1:39wFjnorP3uXE3q8T00Bd2JIBL4= X-Newsreader: Sylpheed 3.5.1 (GTK+ 2.24.32; i686-pc-linux-gnu) Bytes: 2560 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