Opened 16 months ago
Last modified 9 months ago
#3969 new Feature Request
Map Initializer List
Reported by: | anonymous | Owned by: | |
---|---|---|---|
Milestone: | Component: | AutoIt | |
Version: | Severity: | None | |
Keywords: | Map, Initializer List | Cc: |
Description (last modified by mLipok)
; For Arrays, we can use Global $a = [1, 2, 3] ; or Global $a[] = [1, 2, 3] ; or Global $a[3] = [1, 2, 3] ; But if we create a Map, it is always empty, and there is no good way to initialize Maps. So here is a suggestion: Global $a["key1", "key2", "key3"] = [1, 2, 3] ; is the same as Global $a[] $a["key1"] = 1 $a["key2"] = 2 $a["key3"] = 3 ; I'm sure we do not "need" this feature, but it would be nice to have. (the same argument could be made for Array-Initialization with initializer list... we do not "need" it, but it is nice that it exists)
Attachments (0)
Change History (8)
comment:1 Changed 16 months ago by anonymous
comment:2 Changed 15 months ago by mLipok
- Description modified (diff)
comment:3 Changed 10 months ago by Andreik
I use maps very often and I would like to see a map initializer but I don't know if it's possible without introducing a new operator, a keyword or something. It will be a total confusion. Take this as example:
Global $Var[1] = [5]
Right now this is a valid syntax to initialize an array with one element but it could be as well a map with the key name 1 (according to proposed syntax).
comment:4 Changed 9 months ago by vanowm <fromautoitscript.comid240211@…>
Another reasoning to have such feature is ability create constant maps. Currently we have to create a temporary map, populate it, then copy it to a constant.:
; create temporary map Local $a[] $a["key1"] = 1 $a["key2"] = 2 $a["key3"] = 3 ; copy to a constant Global Const $b = $a ; clean up $a = null
comment:5 Changed 9 months ago by anonymous
Please consider this proposition of a good non-ambiguous syntax:
Dim $map["prime": 101, -1: "-one", $hMyGUI: $aSomeAssociatedData]
-- or (which can be an allowed alternative, just like arrays have two ways to define 'em) --
Dim $map[] = ["prime": 101, -1: "-one", $hMyGUI: $aSomeAssociatedData]
comment:6 Changed 9 months ago by anonymous
also
Dim $map = ["prime": 101, -1: "-one", $hMyGUI: $vSomeAssosiatedData]
comment:7 Changed 9 months ago by Andreik
The syntax might work but the examples are bad since AutoIt maps are designed to work with integers and strings, not with handles or other data types as keys.
comment:8 Changed 9 months ago by anonymous
Andreik, that only means that the maps are poorly designed -- and NOTHING else. It's not necessarily anyone's fault/guilt; after all, obtaining perfection(or even just good-enough-ness) is a progress (and i hasten to say that the maps in their current form are NOT good-enough: to be blunt, they're literally a worser version of Scripting.Dictionary -- that's it.) We're all now got involved(if only in spirit) in making maps progress further making them the best they can be(in bed AutoIt); now lets be optimistic and hope/believe it will be crowned with a resounding success!! :]
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.