BrettspielWelt

Technische Fragen => Puppet-Stuff => Thema gestartet von: GewinnerTyp am 20.02.2004, 13:40:43



Titel: Überlauf bei verschachtelten Actions ?
Beitrag von: GewinnerTyp am 20.02.2004, 13:40:43
Hi,

habe mal eine Frage zu Verschachtelungen von Actions:

Angenommen aus der start-Action wird u.a. in eine Action xyz verzweigt.
Diese Action wiederrum enthält (u.a.) den erneuten Aufruf der start Action (DO start).
Bestünde die Gefahr eines "Überlaufs" ? Oder hat die start Action bezüglich des "merkens" von Rücksprungsadressen intern eine besondere Bedeutung ?

Danke !

Gruß
GewinnerTyp


Titel: Re: Überlauf bei verschachtelten Actions ?
Beitrag von: SLC am 20.02.2004, 20:15:35
Huhu!

Die ACTION start hat diesbezüglich keine Sonderbedeutung,
allerdings sehe ich keinen Grund, sie jemals direkt aufzurufen.
Indirekt wird sie durch MASTERRESET aufgerufen...

Rekursive Aufrufe sind grundsätzlich in vollem Umfang möglich,
sie belasten halt nur den Call-Stack, der begrenzt ist (wenn
auch großzügig) und führen auch einmal zu einem OVERFLOW,
dessen Reaktion Du mit "OVERFLOW: ..." und "WHEN ERROR DO ..."
steuern kannst (in gewissen Grenzen)...

LOCAL-Variablen werden bei rekursiven Aufrufen übrigens auch
voll unterstüzt, das heißt, bei jedem Aufruf wird eine neue
Instanz einer lokalen Variable angelegt, die unabhängig ist.

Grüße, SLC


Titel: Re: Überlauf bei verschachtelten Actions ?
Beitrag von: GewinnerTyp am 21.02.2004, 13:11:03
Hi SLC !

jow, auf MASTERRESET bin ich dann auch gekommen. thx ! :)
OVERFLOW und ERROR setzte ich sowieso immer.

Muss man LOCAL Variablen verschiedener Instanzen unterschiedlich aufrufen oder gilt gerade die der jeweiligen Instanz ? Ich vermute mal ja... teste es aber noch...  ;D
(jedenfalls gut zu wissen)

Mein Problem: Möchte auf Eingaben innerhalb einer ACTION reagieren (also eine Tastatureingabe abfragen, die normalerweise mit WHEN KEYWORD bla FROM * DO xyz).
Funzt abba net.  :(
Er durchrennt die WHILE schleife, reagiert aber nicht mehr auf WHEN KEYWORD...
Auch im DEBUGGING kann man nicht erkennen warum net...

Zitat

ACTION funztnet
SET taste 0
WHILE [taste] == 0 DO
 BEGIN
   WHEN KEYWORD würfeln FROM [WHO] DO würfeln
   WHEN KEYWORD stop FROM * DO ende
 END
END


In der ACTION würfeln setze ich dann natürlich taste auf 1

any ideas ?  :)

Gruß
GewinnerTyp


Titel: Re: Überlauf bei verschachtelten Actions ?
Beitrag von: SLC am 21.02.2004, 15:49:19
Huhu!

Alle "WHEN"-Statements "tun erstmal nichts"!
Sie mehrfach zu setzen, macht auch wenig Sinn.

Was passiert z.B. bei "WHEN KEYWORD ..."?

Es wird ein "Trigger" gesetzt, also eine Reaktionsfunktion
auf ein Ereignis. Diese Reaktionsfunktion (ACTION) wird nicht
sofort ausgelöst, sondern (unabhängig vom Programmablauf der
aktuellen ACTION) dann, wenn das Ereignis mal auftritt (und
selbst dann wird die aktuelle ACTION und ggfs. vorher auftretende
Reaktionen noch vorher abgearbeitet).

Die Reaktionsfunktion wird so lange auf das angegebene Ereignis
reagieren, bis mal "IGNORE KEYWORD" mit demselben Keyword dahinter
oder "IGNOREALL KEYWORD" aufgerufen wird!

Beispiel für eine Anwendung von WHEN KEYWORD:

Code:
ACTION start
 WHOIS STARTER
 SET starter [WHO]
 WHEN KEYWORD huhu FROM [starter] DO reaktion
END

ACTION reaktion
 >> Grüß Dich, großer Meister!
END

Grüße, SLC


Titel: Re: Überlauf bei verschachtelten Actions ?
Beitrag von: GewinnerTyp am 21.02.2004, 18:00:02
Hi SLC,

ich merk' schon, ich muss meinen Programmierstil wohl völlig umkrempeln...  ;D

Zitat
selbst dann wird die aktuelle ACTION und ggfs. vorher auftretende
Reaktionen noch vorher abgearbeitet).


...DER entscheidende Hinweis !

DANKE ! "großer Meister" !  ;D

Gruß
GewinnerTyp