Seite 1 von 1

Merkwürdiges Verhalten von Maps: Bug oder Feature?

Verfasst: 28.10.2014 00:32
von schallweller
Ist es normal/gewollt, dass sich Maps so verhalten? Finde es ziemlich irreführend, dass sich eine Map so verhält. Die Abfrage eines Keys legt zwangsläufig das Element an?

Code: Alles auswählen

NewMap Test.i()
Test("a") = 10

; If Test("b") = 10
;   ;...mach irgendwas....	
; EndIf

b = Test("b")
Debug "b = " + b 

ForEach Test()
	Debug "KEY: " + MapKey(Test())
Next
Debugausgabe ohne auskommentierten Quelltext:
  • b = 0
    KEY: a
Debugausgabe mit auskommentierten Quelltext:
  • b = 0
    KEY: a
    KEY: b ( <-- ?? )

Re: Merkwürdiges Verhalten von Maps: Bug oder Feature?

Verfasst: 28.10.2014 00:51
von STARGÅTE
Das ist normal, denn um einen Vergleich durchzuführen (also Test("b") = 10) muss ja eine Zahl in Test("b") existieren, also wird zwangsläufig das Element mit der Zahl 0 erzeugt.

Für die Prüfung ob ein Element existiert gibt es FindMapElement(Map(), Key)

Re: Merkwürdiges Verhalten von Maps: Bug oder Feature?

Verfasst: 28.10.2014 12:59
von NicTheQuick
Die Argumentation ist nicht ganz schlüssig. Immerhin wird hier auch kein neues Element erstellt und trotzdem ein Wert zurück gegeben:

Code: Alles auswählen

b = Test("b")
Und eigentlich darf es nicht sein, dass das hier

Code: Alles auswählen

b = Test("b")
If b = 0 ...
etwas anderes macht wie das hier

Code: Alles auswählen

If Test("b") = 0 ...

Re: Merkwürdiges Verhalten von Maps: Bug oder Feature?

Verfasst: 28.10.2014 19:16
von STARGÅTE
Da hast du natürlich recht.
Ich sehe gerade, ein ähnliches Thema gabs schon mal: Bug bei verwendung von Pointern auf Maps
Dort gabs nämlich Probleme, wenn man mit @ auf den Pointer eines nicht exsitierenden Elements zugegriffen hat.