Merkwürdiges Verhalten von Maps: Bug oder Feature?

Für allgemeine Fragen zur Programmierung mit PureBasic.
schallweller
Beiträge: 15
Registriert: 07.08.2012 15:58

Merkwürdiges Verhalten von Maps: Bug oder Feature?

Beitrag 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 ( <-- ?? )
Purebasic & MIDI - Das taugt!!
Wem meine Musik gefällt - ich freu mich über jeden Download / Kommentar
https://soundcloud.com/schallweller
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

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

Beitrag 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 ...
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten