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

+  BrettspielWelt
|-+  Technische Fragen
| |-+  Puppet-Stuff (Moderator: SLC)
| | |-+  BUG: WHEREIS STARTER
0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: BUG: WHEREIS STARTER  (Gelesen 110 mal)
Chazar
Zauberer
****
Geschlecht: Männlich
Beiträge: 317


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


Profil anzeigen
« am: 15.03.2008, 20:27:36 »

1) Wenn der Starter schon ausgeloggt ist, erhalte ich auf die Anweisung WHEREIS STARTER sofort den Fehler java.lang.NullPointerException. Ist das nicht ein wenig übertrieben? Sollte die Variable ROOM in diesem Fall nicht einfach nicht existieren oder leer sein? Natürlich kann man den Namen des Starters in einer Variablen speichern und mit GETINFO überprüfen, aber ich brauche die Raumnummer ohnehin.

(EDIT/UPDATE: Fehler wurde behoben, siehe Thread

2) Auch habe ich Probleme mit EXISTS: Mit einem ausgedachten Variablennamen xyz gilt in Versuchen immer immer ( EXISTS xyz ) == ( NOT ( ISEMPTY [xyz] ) ). Also habe ich fast überall NOT ISEMPTY durch EXISTS ersetzt und bekam prompt Probleme: Bei Variablen wie SUBST1 oder PARAM stimmt die Gleichung nicht! Diese können leer sein und trotzdem existieren, wieso? Oder habe ich es hier einfach nur mit Listen zu tun, die lediglich die leere Liste enthalten? Muss ich diese von Info-Befehlen gesetzen Variablen immer mit ISEMPTY untersuchen?
« Letzte Änderung: 22.11.2008, 14:22: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 #1 am: 16.03.2008, 01:45:35 »

NOT EXISTS var -> die Variable gibt es nicht (oder wurde mit UNSET vernichtet)
ISEMPTY [var] -> die Variable enthält einen Leerstring (leere Liste)

Das ist schon 2 paar Schuhe, auch wenn im 2. Fall sogar eine
nicht vorhanden Variable erlaubt ist (und zu "" wird),
wodurch es eigentlich nur den beschriebenen Unterschied gibt:
Ist var mit dem Wert "" belegt, dann ist NOT EXISTS var
zwar FALSE, aber ISEMPTY [var] ist TRUE... Grin

Man achte übrigens drauf, was passiert, wenn man eine
LOCAL-Variable gleichen Namens mit UNSET bearbeitet! Grin

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 #2 am: 16.03.2008, 13:55:15 »

Das Problem ist aber, das
Code:
LOCAL x
IF EXISTS x
 >> Nie, es sei denn es gibt ein globales x
ELSE
 >> Immer.
gilt! Es gibt also einen Unterschied zwischen LOCAL x und LOCAL x = ""

Welcher Code ist dann also besser:
Code:
LOCAL x
IF ...
  EVAL x = ...
ELSE
  EVAL x = ...
oder
Code:
IF ...
  EVAL x = ...
ELSE
  EVAL x = ...
UNSET x
wenn x ohnehin nicht global existiert, also ein temporäres verdecken ausgeschlossen ist?

---

Abgesehen von diesen Feinheiten, was ist mit meiner ersten Frage im ersten Post in diesem Thread? Bug oder Feature?
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 #3 am: 16.03.2008, 15:17:52 »

Moin!

Das Problem ist aber, das
Code:
LOCAL x
IF EXISTS x
 >> Nie, es sei denn es gibt ein globales x
ELSE
 >> Immer.
gilt! Es gibt also einen Unterschied zwischen LOCAL x und LOCAL x = ""

Eigentlich andersrum. Nach "LOCAL x" sollte "EXISTS x" immer TRUE liefern.
Falls nicht -> BUG! Grin

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 #4 am: 16.03.2008, 16:49:31 »

Eigentlich andersrum. Nach "LOCAL x" sollte "EXISTS x" immer TRUE liefern.
Falls nicht -> BUG! Grin

Das ist ja mal eine klare, verlässliche Antwort! Grin
Also ist es ein BUG:

Code:
    -- 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]]
<OUTPUT>
-- [Timaer] EXISTS nixda: FALSE
-- [Timaer] ISEMPTY nixda: TRUE
-- [Timaer] ISINTEGER nixda: FALSE
-- [Timaer] LOCAL nixda
-- [Timaer] EXISTS nixda: FALSE
-- [Timaer] ISEMPTY nixda: TRUE
-- [Timaer] ISINTEGER nixda: FALSE
-- [Timaer] EVAL nixda = "123"
-- [Timaer] EXISTS nixda: TRUE
-- [Timaer] ISEMPTY nixda: FALSE
-- [Timaer] ISINTEGER nixda: TRUE
-- [Timaer] UNSET nixda
-- [Timaer] EXISTS nixda: FALSE
-- [Timaer] ISEMPTY nixda: TRUE
-- [Timaer] ISINTEGER nixda: FALSE
Den Test hatte ich vor 2-3 Tagen durchgeführt, auf die Idee LOCAL = "" kam ich damals noch nicht.

Gruß, Chazar, der immer noch auf eine Antwort zur wichtigeren Frage nach WHEREIS STARTER wartet. Wink



Gespeichert

Vorsicht! Ich bremse auch für langsame Spieler! Drängeln dürfen nur Kinder...
Seiten: [1] 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