Article View: pl.comp.lang.tcl
Article #127Re: Jak odwołać się do nazwy procedury?
From: Wojciech Kocjan
Date: Wed, 13 Jul 2005 06:11
Date: Wed, 13 Jul 2005 06:11
73 lines
3237 bytes
3237 bytes
kokoryn napisał(a):
> witam
>
> Piszę skrypt, w którym tworzę dynamicznie kilka procedur wg pewnego
> schematu. Każda taka procedura ma oczywiście inną nazwę i chciałbym
> żeby ta nazwa mogła posłużyć jako indeks w globalnej tablicy, gdzie
> każda procedura będzie mogła przechowywać jakieś swoje dane. Z grubsza
> wygląda to tak:
>
> array set tab {}
>
> proc create_proc {name}\
> {
> proc $name {}\
> {
> global tab
> set tab(???) costam
> }
> }
Prościej byłoby to zrobić w ten sposób:
proc create_proc {name params body} {
# mybody wstawione bedzie na poczatku procedury
set mybody ""
# sprawia, ze zmienna np ::tab(jakasfunkcja) bedzie w tej
# procedurze widoczna jakos zmienna lokalna mytab
append mybody "upvar #0 ::tab($name) mytab" \n
# stworzenie procedury - mozna nawet skorzystac z [uplevel]
proc $name $params "$mybody\n$body"
}
Wtedy robisz sobie:
create_proc jakasfunkcja {} {
set mytab 10
}
Bardzo czesto prosciej jest robic to inaczej:
namespace eval dane {}
proc jakasfunkcja {} {
upvar #0 ::dane::jakasfunkcja mojedane
return "Moje dane to $mojedane"
}
Nie ma sensu dla jednej linijki tworzyc automatu.
> W jaki sposób powinienem odwołać się do nazwy procedury w miejscu
> oznaczonym "???" tak, aby móc zapisać coś do tablicy pod odpowiednim
> indeksem? Wydawało mi się, że polecenie info powinno dawać taką
> możliwość, ale z dokumentacji wynika, że nie daje.
set nazwamojejprocedury [lindex [info level [info level]] 0]
Nie jest to najprostsze, ale bardzo logiczne, wystarczy o [info level]
poczytac :-)
> Przy okazji chciałem powiedzieć, że jestem trochę zawiedziony tak małą
> aktywnością na pl.comp.lang.tcl. Nie spodziewałem się wprawdzie
> jakiegoś wielkiego ruchu, ale na pl.comp.lang.c i pl.comp.programming
> cały czas przewijają się jakieś dygresje (czasem nawet całe dyskusje)
> o Tcl (stąd zresztą dowiedziałem się o tym języku), więc sądziłem, że
> ludzie biorący w nich udział będą pisać tutaj, gdy grupa ruszy. Cóż,
> mam nadzieję, że z czasem grupa się rozkręci.
No ale trochę to rozkręcanie grupy potrwa...
--
WK
Technical Details
Message-ID:
<db2b9q$qdf$1@atlantis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<b4g7d1lb34n5638g0daao7mq3i0jhivh8v@4ax.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!news.tpi.pl!not-for-mail From: Wojciech Kocjan <mojeimie@kocjan.org> Newsgroups: pl.comp.lang.tcl Subject: Re: Jak odwołać się do nazwy procedury? Date: Wed, 13 Jul 2005 08:11:02 +0200 Organization: tp.internet - http://www.tpi.pl/ Lines: 73 Message-ID: <db2b9q$qdf$1@atlantis.news.tpi.pl> References: <b4g7d1lb34n5638g0daao7mq3i0jhivh8v@4ax.com> NNTP-Posting-Host: dq2.dataquest.pl Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1121235067 27055 195.116.54.236 (13 Jul 2005 06:11:07 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Wed, 13 Jul 2005 06:11:07 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317) X-Accept-Language: pl, en-us, en In-Reply-To: <b4g7d1lb34n5638g0daao7mq3i0jhivh8v@4ax.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit