Willkommen Gast. Bitte einloggen oder registrieren.
Übersicht Hilfe Suche Einloggen Registrieren

+  BrettspielWelt
|-+  Technische Fragen
| |-+  Puppet-Stuff (Moderator: SLC)
| | |-+  Problem mit CASEALL [FIXED]
0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: 1 [2]  Alle Nach unten Drucken
Autor Thema: Problem mit CASEALL [FIXED]  (Gelesen 408 mal)
SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #15 am: 21.11.2008, 16:18:53 »

Moin!

Hallo,

könnte es sein das Caseall eigentlich immer ausgeführt wird egal was für ein ausdruck dahinter steht es aber erwartet wird, dass da ein "*" zu stehen hat und sollte dies nicht der Fall sein er in der Zählung der Scope durcheinander kommt und damit im gesamten Programmablauf oder wie ist es zu erklären das er plötzlich eine Rücksprung von Scope 0 auf -1 machen will?
Code:
(01:25:04) S < Rücksprung von Scope 0 nach Scope -1 in Zeile 19 (WHO)

Gruß Niki

Scope -1 steht für "no scope". Dann ist das Programm "idle"
und kann nur durch ein EVENT aktiviert werden, etwa @-Befehl
oder Antellen oder Erscheinen oder... Grin

In Klammern dahinter steht, welche lokalen Variablen das betrifft...

Grüße, SLC
Gespeichert
Stechmuck
BSW-Admin
*****
Geschlecht: Männlich
Beiträge: 5900


Erfahrung ist eine nützliche Sache, leider macht man sie immer erst kurz nachdem man sie bräuchte.


Profil anzeigen WWW
« Antworten #16 am: 21.11.2008, 16:25:27 »

P.S. @Stechi: Kannst Du mal in Zeile 3035 schauen:
Code:
for (i = a.length - 1; i >= 0; i--)
Das kommt mir verdächtig falsch vor... Grin
Komisch, daß das nicht für mehr Chaos gesorgt hat... Grin
Ahoi

Da kenne ich mich wohl zu wenig aus im Code.
Vermuten würde ich:
Code:
for (i = a.length - 2; i > 0; i--)

Grüßle Stechi
Gespeichert


Chazar
Zauberer
****
Geschlecht: Männlich
Beiträge: 317


Odenwald -> München -> Schottland. Proud father of two. Always remember to have fun!


Profil anzeigen
« Antworten #17 am: 21.11.2008, 16:25:43 »

Gefunden und behoben. Solche Bugs kannst Du immer auch zwischendurch melden... Grin

Das hatte ich doch vor langer einiger Zeit getan, der Bug war aber letztens immer noch da gewesen! Da Du damals auf ein Unter-thema des Threads ja geantwortet hast, ging ich eben davon aus, das Du Dir dieser Sache schon bewusst warst, aber als unwichtig/korrekt (im Sinne von GETINFO und undefinierten Werten falls offline) abgetan hast und habe eben als Workaround die Error-Routinen jedesmal unmittelbar davor verbogen. Ist ja einfach und ich will sicherlich nicht wegen Kleinigkeiten herumnerven! Smiley Ich meld' schon alles was ich so finde!

Ich teste das morgen also nochmal - und bin auch gespannt darauf welchen Wert [ROOM] dann hat! (auch wenn's für mein Puppet wurscht ist was da drin steht.)

Falls es keine NullPointerException mehr gibt: Danke! Falls doch: Danke trotzdem für das befassen mit dem Thema.  Cool



(EDIT/PS: Dieses Unterthema in den oben verlinkten Thread mit EXISTS/ISEMPTY - wurde das auch behoben? Muss ich auch nochmal testen... Wink )

« Letzte Änderung: 21.11.2008, 16:33:49 von Chazar » Gespeichert

Vorsicht! Ich bremse auch für langsame Spieler! Drängeln dürfen nur Kinder...
SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #18 am: 21.11.2008, 17:19:47 »

Moin!

Falls es keine NullPointerException mehr gibt: Danke! Falls doch: Danke trotzdem für das befassen mit dem Thema.  Cool

Also, zum Puppet sollen eigentlich allenfalls IllegalParameterExceptions
durchdringen - vielleicht noch numerische Fehler. Auf keinen Fall solch
unvermittelte NullPointerExceptions! ROOM wird in dem Fall nicht gesetzt sein.
Die ganze Sache ist mir dann wohl durchgerutscht... Grin

Was genau war noch mit ISEMPTY/EXISTS?

Grüße, SLC

P.S.@Stechi: Jo, so oder so ähnlich dachte ich mir das... Grin Schaue ich mir nachher genauer an...
Gespeichert
Chazar
Zauberer
****
Geschlecht: Männlich
Beiträge: 317


Odenwald -> München -> Schottland. Proud father of two. Always remember to have fun!


Profil anzeigen
« Antworten #19 am: 21.11.2008, 22:51:49 »

Was genau war noch mit ISEMPTY/EXISTS?

Es gilt derzeit das ISEMPTY immer die Verneinung von EXISTS ist, was offensichtlich nicht in jedem Fall gelten sollte!

Anders gesagt, gilt nach LOCAL name noch nicht EXISTS name, was falsch ist.

Ich habe den Test-Code dazu aus dem oben verlinkten Thread gerade eben noch einmal wiederholt: Das Problem besteht immer noch!

Hier noch einmal der Test-Code, gefolgt vom Ergebnis.
Code:
ACTION test
    -- EXISTS nixda: [=EXISTS nixda]
    -- ISEMPTY nixda: [=ISEMPTY [nixda]]
    -- ISINTEGER nixda: [=ISINTEGER [nixda]]
    LOCAL nixda
    -- LOCAL nixda
    -- EXISTS nixda: [=EXISTS nixda]
    -- ISEMPTY nixda: [=ISEMPTY [nixda]]
    -- ISINTEGER nixda: [=ISINTEGER [nixda]]
    EVAL nixda = "123"
    -- EVAL nixda = "123"
    -- EXISTS nixda: [=EXISTS nixda]
    -- ISEMPTY nixda: [=ISEMPTY [nixda]]
    -- ISINTEGER nixda: [=ISINTEGER [nixda]]
    UNSET nixda
    -- UNSET nixda
    -- EXISTS nixda: [=EXISTS nixda]
    -- ISEMPTY nixda: [=ISEMPTY [nixda]]
    -- ISINTEGER nixda: [=ISINTEGER [nixda]]
END

Ausgabe:
Code:
Chazar: @test
-- [TestdummyY] EXISTS nixda: FALSE
-- [TestdummyY] ISEMPTY nixda: TRUE
-- [TestdummyY] ISINTEGER nixda: FALSE
-- [TestdummyY] LOCAL nixda
-- [TestdummyY] EXISTS nixda: FALSE
-- [TestdummyY] ISEMPTY nixda: TRUE
-- [TestdummyY] ISINTEGER nixda: FALSE
-- [TestdummyY] EVAL nixda = "123"
-- [TestdummyY] EXISTS nixda: TRUE
-- [TestdummyY] ISEMPTY nixda: FALSE
-- [TestdummyY] ISINTEGER nixda: TRUE
-- [TestdummyY] UNSET nixda
-- [TestdummyY] EXISTS nixda: FALSE
-- [TestdummyY] ISEMPTY nixda: TRUE
-- [TestdummyY] ISINTEGER nixda: FALSE
-- [TestdummyN] EXISTS nixda: FALSE
-- [TestdummyN] ISEMPTY nixda: TRUE
-- [TestdummyN] ISINTEGER nixda: FALSE
-- [TestdummyN] LOCAL nixda
-- [TestdummyN] EXISTS nixda: FALSE
-- [TestdummyN] ISEMPTY nixda: TRUE
-- [TestdummyN] ISINTEGER nixda: FALSE
-- [TestdummyN] EVAL nixda = "123"
-- [TestdummyN] EXISTS nixda: TRUE
-- [TestdummyN] ISEMPTY nixda: FALSE
-- [TestdummyN] ISINTEGER nixda: TRUE
-- [TestdummyN] UNSET nixda
-- [TestdummyN] EXISTS nixda: FALSE
-- [TestdummyN] ISEMPTY nixda: TRUE
-- [TestdummyN] ISINTEGER nixda: FALSE
wobei Y/N am Ende des Namens die Einstellung von ZEROINTVARS: YES/NO widerspiegelt (ohne Auswirkung auf den Test).


PS@SLC: Soll ich also in Zukunft besser solange nachhaken bis ich ein JA oder NEIN erhalten habe? Musst's nur sagen! Wink

PPS@SLC:Wobei eine Änderung vermutlich einige bewährte Puppets aus dem Tritt bringen könnte. Sad Mir ist's wurscht, ich nutze ausschliesslich ISEMPTY, weil da die Semantik klar ist.
« Letzte Änderung: 21.11.2008, 23:21:19 von Chazar » Gespeichert

Vorsicht! Ich bremse auch für langsame Spieler! Drängeln dürfen nur Kinder...
SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #20 am: 22.11.2008, 00:47:52 »

Puh! Grin

EXISTS vor Zuweisung eines Wertes, das ist harter Tobak! Grin
Ich vermute mal stark, Du hast mit Deiner Beobachtung recht,
ich wäre allerdings auch nicht drauf gekommen, EXISTS aufzurufen,
bevor ein Wert zugewiesen wird. Oder ich benutze LOCAL x = y... Grin

Derzeit ist es so, daß ein LOCAL x ein möglicherweise vorhandenes
globale(re)s x überdecken wird, also

Code:
EXISTS x | Kommando
---------+-----------------
FALSE    | ACTION start
TRUE     |   LOCAL x = "blubber"
TRUE     |   DO unter
...
TRUE     | ACTION unter
FALSE    |   LOCAL x
TRUE     |   EVAL x = "blah"
...

Über die Vor- und Nachteile muß ich dann noch mal nachdenken... Grin

Grüße, SLC
Gespeichert
SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #21 am: 22.11.2008, 03:07:14 »

Moin!

Ab Neustart sollten keine NullPointerExceptions mehr auftreten bei

- WHEREIS STARTER
- WHEREIS OWNER
- WHEREIS PUPPET
- CASEALL ...

Grüße, SLC
Gespeichert
Chazar
Zauberer
****
Geschlecht: Männlich
Beiträge: 317


Odenwald -> München -> Schottland. Proud father of two. Always remember to have fun!


Profil anzeigen
« Antworten #22 am: 22.11.2008, 14:21:18 »

EXISTS vor Zuweisung eines Wertes, das ist harter Tobak! Grin

Häh??? Ein gewisser SLC hat mich damals in diesem Thread ja gerade belehrt das dies der Unterschied zwischen EXISTS und ISEMPTY sein soll!

Oder habe ich das damals falsch verstanden, d.h. gibt es einen echten Unterschied zwischen
Code:

LOCAL xyz
und
Code:

LOCAL xyz = ""
Wenn ja, dann hatte ich das wohl nur falsch verstanden. Ansonsten wären EXISTS und ISEMPTY wirklich identisch, mal von Verneinung und Auswertung der Variablen abgesehen.


Wie gesagt, mir ist's eigentlich wurscht, da es mich bisher eigentlich nie interessiert hat ob eine Variable existiert oder nicht. (Das Überdecken von globalen oder auch lokalen (!) Variablen mit neuen lokalen Variablen nach Funktionsaufruf/Rekursion nutze ich dagegen oft aus, um Werte nur temporär zu ändern).

Anstelle von
Code:
EXISTS foo
schreibe ich derzeit halt immer
Code:
NOT ( ISEMPTY [foo] )
da ich nach Deiner Antwort in dem Thread von März verunsichert war, ob sich das mal ändern könnte.

Danke für die Bugfixes! (Noch nicht von mir getestet, aber ich melde mich falls es nicht klappen sollte. Smiley )


« Letzte Änderung: 22.11.2008, 14:27:46 von Chazar » Gespeichert

Vorsicht! Ich bremse auch für langsame Spieler! Drängeln dürfen nur Kinder...
SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #23 am: 22.11.2008, 16:10:28 »

Moin!

Die Klammer kannst Du Dir eh abgewöhnen... Grin

Code:
NOT ISEMPTY [foo]

... und ja, natürlich gibt es einen Unterschied zwischen diesen beiden:

Code:
LOCAL xyz
...
LOCAL xyz = ""

Ersterer deklariert xyz als LOCAL (geht ja auch nur einmal in einem Scope),
weist aber KEINEN Wert zu. D.h. streng genommen gibt es die Variable noch nicht.

Die zweiter Version legt dagegen eine Variable mit dem Wert "" an,
d.h. EXISTS xyz -> TRUE / NOT ISEMPTY [xyz] -> FALSE...

Grüße, SLC
Gespeichert
Chazar
Zauberer
****
Geschlecht: Männlich
Beiträge: 317


Odenwald -> München -> Schottland. Proud father of two. Always remember to have fun!


Profil anzeigen
« Antworten #24 am: 22.11.2008, 17:38:04 »

Schon klar, aber was ist der beobachtbare Unterschied, abgesehen von EXISTS?

BEISPIEL-FRAGE:
Code:
FOR x IN [bar]
BEGIN
  LOCAL y = [x] * [pi]
  ADDLIST foo y
END
sollte ich dann besser LOCAL foo = "" oder LOCAL foo davor schreiben, wenn die Liste foo lokal sein soll?

Soweit ich das jetzt verstehe, ist das doch vollkommen egal, oder?

PS: Oder habe ich dann das Problem mit der ein-elementigen Liste, welche die leere Liste enthaelt? Davon sprichst Du immer wieder, aber verstanden, bzw. ein Beispiel wo sich das auswirkt, habe ich (es) nicht.
« Letzte Änderung: 22.11.2008, 17:44:29 von Chazar » Gespeichert

Vorsicht! Ich bremse auch für langsame Spieler! Drängeln dürfen nur Kinder...
SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #25 am: 22.11.2008, 17:44:38 »

Moin!

Wie ich hörte, gibt es heute eine DEBUG-Meldung umsonst,
wenn man SWITCH/CASE anwendet, diese ist aber morgen raus.
Irgendwie ist die vorletzte Version auf dem Server gelandet! Grin

Grüße, SLC
Gespeichert
SLC
Magier
*****
Geschlecht: Männlich
Beiträge: 14510


Ich heiße SLC, komme aus Hamburg und spiele gern (wer denn nicht?)

SLC_BSW
Profil anzeigen WWW
« Antworten #26 am: 22.11.2008, 18:01:24 »

Moin!

Viel zu beobachten ist da nicht, da es ein totaler Spezialfall ist
(also LOCAL x bis zur Zuweisung eines Wertes; dort wird normalerweise
noch nicht einmal jeder EXISTS aufrufen... Grin)

  • liefert in beiden Fällen natürlich "", was nicht zu unterscheiden ist.
EXISTS ist eigentlich nur etwas genauer (es gilt: NOT ISEMPTY
  • => EXISTS x)...
Schon klar, aber was ist der beobachtbare Unterschied, abgesehen von EXISTS?

BEISPIEL-FRAGE:
Code:
FOR x IN [bar]
BEGIN
  LOCAL y = [x] * [pi]
  ADDLIST foo y
END
sollte ich dann besser LOCAL foo = "" oder LOCAL foo davor schreiben, wenn die Liste foo lokal sein soll?

Soweit ich das jetzt verstehe, ist das doch vollkommen egal, oder?

PS: Oder habe ich dann das Problem mit der ein-elementigen Liste, welche die leere Liste enthaelt? Davon sprichst Du immer wieder, aber verstanden, bzw. ein Beispiel wo sich das auswirkt, habe ich (es) nicht.

Der Code ist eigentlich völlig okay; wenn Du foo aber nur in der ACTION
brachst, würde ich schon sagen, daß Du LOCAL foo vor die FOR-Schleife
packen solltest. Für den ADDLIST-Befehl ist das allerdings erstmal egal.

Zu dem Beispiel, wo sich das auswirkt...
Code:
LOCAL Liste
>> "[Liste]" [=LISTLENGTH [Liste]] [=LENGTH [Liste]]
ADDLIST Liste ""
>> "[Liste]" [=LISTLENGTH [Liste]] [=LENGTH [Liste]]
ADDLIST Liste ""
>> "[Liste]" [=LISTLENGTH [Liste]] [=LENGTH [Liste]]

Ausgabe in etwa:
Code:
"" 0 0
"" 1 0
" " 2 1

Du siehst also, daß sich das erste ADDLIST anders verhält
als das zweite, obwohl in beiden Fällen [Liste] == "" und
LENGTH [Liste] == 0, also ohne sichtbaren Unterschied, nur
die LISTLENGTH ist anders.

Dasselbe Beispiel mit "x":
Code:
LOCAL Liste
>> "[Liste]" [=LISTLENGTH [Liste]] [=LENGTH [Liste]]
ADDLIST Liste "x"
>> "[Liste]" [=LISTLENGTH [Liste]] [=LENGTH [Liste]]
ADDLIST Liste "x"
>> "[Liste]" [=LISTLENGTH [Liste]] [=LENGTH [Liste]]

Ausgabe in etwa:
Code:
"" 0 0
"x" 1 1
"x x" 2 3

Bei nichtleeren Elementen ist es einfach: Die LENGTH ist mit 0 bzw. >0 (1)
unterschiedlich und auch der Wert ist unterschiedlich ("" vs. "x").

Soweit verstanden? Der Fall hat bei mir damals einige Kopfschmerzen
verursacht, aber am Ende hatte ich eine konsistente Lösung. Lange
Zeit waren davor leere Einträge gar nicht möglich, was z.T. für
Verwirrung gesorgt hatte... Grin

Grüße, SLC
« Letzte Änderung: 24.11.2008, 14:27:41 von SLC » Gespeichert
Chazar
Zauberer
****
Geschlecht: Männlich
Beiträge: 317


Odenwald -> München -> Schottland. Proud father of two. Always remember to have fun!


Profil anzeigen
« Antworten #27 am: 23.11.2008, 13:16:32 »

Super! Danke für die Erklärung!  Smiley Danke

Das erklärt auch ein Problem, das ich gerade erst vor 3 Tagen hatte. Ich sah in den Debug-Meldungen sowas wie:
Code:
>> Wert: "[lst]" Länge: [=LISTLENGTH [lst]]

Wert: "1 2 3 4 5 6 7 " Länge: 36
Als Fehlerquelle fand ich ein vergessenes BEGIN...END hinter einem ELSE, doch richtig erklären konnte ich mir das nicht. Jetzt verstehe ich das aber: Per ADDLIST wurden leere Elemente hinzugefügt!
Gespeichert

Vorsicht! Ich bremse auch für langsame Spieler! Drängeln dürfen nur Kinder...
Chazar
Zauberer
****
Geschlecht: Männlich
Beiträge: 317


Odenwald -> München -> Schottland. Proud father of two. Always remember to have fun!


Profil anzeigen
« Antworten #28 am: 30.11.2008, 00:03:20 »

Ab Neustart sollten keine NullPointerExceptions mehr auftreten bei

- WHEREIS STARTER

Ich erhalte immer noch Null Pointer Exceptions, wenn ich ausgeloggt bin und mein Puppet WHEREIS STARTER ausführt. Sad

Gespeichert

Vorsicht! Ich bremse auch für langsame Spieler! Drängeln dürfen nur Kinder...
Seiten: 1 [2]  Alle Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.15 | SMF © 2006-2009, Simple Machines
SMFAds for Free Forums
Prüfe XHTML 1.0 Prüfe CSS