Hi there
I was just cleaning my project and removed all .clear methods for my maps as I noted in the transpiled code that clearing them was not necessary due to to .initialize method just after 'dim m as map', thing is this has resulted in something else.
This is what happens...
When maps are defined with CreateMap, everything is well. The issue is when a map is dimmed, initialized and then put statements are used. Whilst CreateMap returns an undefined '.isinitialized' value for the map, dimming a map, then calling .initialize and then .put, results in a true '.isinitialized' value, which is also included as part of the map keys and values.
Case 1
This returns 'undefined' on the log for .isinitialized
Case 2
This returns 'true' on the log for .isinitialized, however '.isinitialized' is added to the map size and thus on .GetKeyAt and .GetValueAt as 'isinitialized' and 'true' respectively, i.e. part of the .Keys value
Having .Clear just after .Initialize ensures that .isinitialize does not exist and is 'undefined' in Case 2, this is the solution in my case, but perhaps something to look at?
I was just cleaning my project and removed all .clear methods for my maps as I noted in the transpiled code that clearing them was not necessary due to to .initialize method just after 'dim m as map', thing is this has resulted in something else.
This is what happens...
When maps are defined with CreateMap, everything is well. The issue is when a map is dimmed, initialized and then put statements are used. Whilst CreateMap returns an undefined '.isinitialized' value for the map, dimming a map, then calling .initialize and then .put, results in a true '.isinitialized' value, which is also included as part of the map keys and values.
Case 1
B4X:
Dim nm As Map = CreateMap("a": "a", "b": "b", "c": "c")
Log (nm.IsInitialized)
This returns 'undefined' on the log for .isinitialized
Case 2
B4X:
Dim nm As Map
nm.Initialize
Log(nm.IsInitialized)
nm.Put("a", "a")
nm.Put("b", "b")
nm.Put("c", "c")
This returns 'true' on the log for .isinitialized, however '.isinitialized' is added to the map size and thus on .GetKeyAt and .GetValueAt as 'isinitialized' and 'true' respectively, i.e. part of the .Keys value
Having .Clear just after .Initialize ensures that .isinitialize does not exist and is 'undefined' in Case 2, this is the solution in my case, but perhaps something to look at?