Article View: pl.comp.lang.tcl
Article #129Re: Jak odwołać się do nazwy procedury?
From: Wojciech Kocjan
Date: Sun, 17 Jul 2005 14:49
Date: Sun, 17 Jul 2005 14:49
66 lines
3919 bytes
3919 bytes
kokoryn napisał(a):
> On Wed, 13 Jul 2005 08:11:02 +0200, Wojciech Kocjan
> <mojeimie@kocjan.org> wrote:
>
>
>>Prościej byłoby to zrobić w ten sposób:
>>[ciach]
>>Nie ma sensu dla jednej linijki tworzyc automatu.
>
>
> Dziękuję za propozycje rozwiązań (te i w poście obok). Jak napisałem
> przed chwilą w innym poście, nie próbuję robić niczego na siłę.
Ok. To już wiesz, że jak będziesz coś chciał zrobić to wtedy zależy od
rozwiązania. korzystanie z OO dla 100 linijek kodu, w aplikacji o 50k
kodu nie ma sensu - natomiast robienie całej aplikacji albo jej
większości w OO ma sens. Ja robię kontrolki i mechanizmy w OO, a obsługę
bez OO - wtedy można przeładować kilka procedur bez restartu.
> Chciałem po prostu wiedzieć, czy da się odwołać do nazwy procedury z
> jej wnętrza. Incr Tcl nie próbowałem jeszcze używać, bo dopiero uczę
> się Tcl-a i chciałbym poznać najpierw możliwie dobrze podstawowe
> mechanizmy języka. Zresztą Tcl/Tk nauczył mnie, że nowoczesny
> dynamiczny język może się doskonale obejść bez modelu obiektowego,
> więc nie palę się do Incr Tcl.
Aha. Co do obywania się bez, to ja bardzo chwalę sobie [Incr Tk], bo nie
czuje się różnicy między Tk a megawidgetami (poza bindowaniem, to jest
koszmar Incr Tk niestety.
> Przy tym muszę przyznać, że nie do
> końca rozumiem stwierdzenie z Twojej poprzedniej wiadomości o robieniu
> "mini OO". Przecież ja tak naprawdę nie wprowadzam żadnych obiektów, w
> końcu wszystkie procedury tworzone przez create_proc to w istocie ta
> sama procedura tyle, że z dodatkowym "argumentem" przekazanym jakby
> przez jej nazwę, która ma operować na jakiejś tam strukturze danych.
> Po prostu taki cukier składniowy, ale całkiem ładnie wygląda moim
> zdaniem.
No ale właśnie to co Ty robisz działa dokładnie tak samo jak OO w Tcl.
Dlatego każdemu się skojarzyło :-)
>>set nazwamojejprocedury [lindex [info level [info level]] 0]
>>Nie jest to najprostsze, ale bardzo logiczne, wystarczy o [info level]
>>poczytac :-)
> Właśnie o coś takiego chodziło! Przeoczyłem to, bo przeleciałem
> wzrokiem po dokumentacji i przeczytałem tylko co info level zwraca bez
> argumentu, mój błąd.
Aha, kolejne rozwiązanie to [interp alias].
% proc dumpargs {args} {puts $args}
% interp alias {} dumpx {} dumpargs x
% dumpargs a b c
a b c
% dumpx a
x a
To pozwala, żeby 1szy parametr prawdziwej procedury to była nazwa
danych, a create_proc wtedy tworzy zmienną (lub tablicę) z danymi
lokalnymi + robi alias. Nie podałem całego przykładu, bo mi się po
prostu nie chce :-). Dopiszesz sobie. To chyba najładniejsze
rozwiązanie, bez czarowania z introspekcją :-)
--
WK
Technical Details
Message-ID:
<dbdr5r$o9o$1@atlantis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.nask.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<b4g7d1lb34n5638g0daao7mq3i0jhivh8v@4ax.com> <db2b9q$qdf$1@atlantis.news.tpi.pl> <krqkd1t3nu4eqqd81f81au1djbarqp2g9d@4ax.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.nask.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail From: Wojciech Kocjan <hceicjow.backward@kocjan.org> Newsgroups: pl.comp.lang.tcl Subject: Re: Jak odwołać się do nazwy procedury? Date: Sun, 17 Jul 2005 16:49:25 +0200 Organization: tp.internet - http://www.tpi.pl/ Lines: 66 Message-ID: <dbdr5r$o9o$1@atlantis.news.tpi.pl> References: <b4g7d1lb34n5638g0daao7mq3i0jhivh8v@4ax.com> <db2b9q$qdf$1@atlantis.news.tpi.pl> <krqkd1t3nu4eqqd81f81au1djbarqp2g9d@4ax.com> NNTP-Posting-Host: bom131.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1121611771 24888 83.29.28.131 (17 Jul 2005 14:49:31 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Sun, 17 Jul 2005 14:49:31 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206) X-Accept-Language: pl, en-us, en In-Reply-To: <krqkd1t3nu4eqqd81f81au1djbarqp2g9d@4ax.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit