🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.tcl
Article #129

Re: Jak odwołać się do nazwy procedury?

#129
From: Wojciech Kocjan
Date: Sun, 17 Jul 2005 14:49
66 lines
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-mail
References: <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