AHK - использовать переменную для получения информации о массиве - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь извлечь информацию из массива, используя переменную, но она просто появляется пустой.

Если я жестко закодирую ее, она отобразит правильную информацию.

enter image description here

ProfileList := {}

ProfileList.Insert("Dave", {Name:"Dave",Password:"Daves Password",Server:"Regina Server"})
ProfileList.Insert("Jim", {Name:"Jim",Password:"Jims Password",Server:"Saskatoon Server"})
em :=Dave
MsgBox, % "Here is the Password for Dave: " ProfileList[%em%].Password
     . "`nHere is the Password for Jim: " ProfileList["Jim"].Password

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Вы, похоже, путаете устаревший и синтаксис выражений.

Сначала давайте посмотрим, где вы пытаетесь определить переменную em.
Похоже, вы пытаетесь сохранить строку * Там 1005 *.
Если бы вы использовали устаревший синтаксис em = Dave, вы бы использовали оператор = для назначения текста переменной, а переменная em действительно будет содержать строку Dave.
Но вы используете синтаксис выражений em := Dave (как следует, это уже не первое десятилетие 2000-х). Итак, вы присваиваете выражение переменной em. И назначаемое вами выражение - Dave. Dave как выражение ожидается как переменная. Итак, вы присваиваете переменную Dave em. Однако такой переменной не существует, поэтому вы ничего не присваиваете (пусто) для em.
Чтобы назначить строку для em в синтаксисе выражения, вы должны сделать em := "Dave".

И затем ко второй проблеме, снова используя устаревший синтаксис в выражении.
ProfileList[%em%].Password
%variable% будет устаревшим синтаксическим способом ссылки на переменную, но, поскольку мы находимся в выражении, мы хотим просто сделайте ProfileList[em].Password для ссылки на переменную.

Устаревший синтаксис против синтаксиса выражений может сбивать с толку. Эта страница из документации может вам немного помочь:
https://www.autohotkey.com/docs/Language.htm

Я бы порекомендовал попытаться привыкнуть никогда не использовать устаревший синтаксис. Конечно, это будет работать, но хорошей практикой является не использовать его. Возможно, вы однажды захотите писать в AHK v2, и тогда уже не будет унаследованного синтаксиса.

1 голос
/ 09 января 2020

Используйте кавычки вокруг "Dave" и без процентов. Это работает:

ProfileList := {}

ProfileList.Insert("Dave", {Name:"Dave",Password:"Daves Password",Server:"Regina Server"})
ProfileList.Insert("Jim", {Name:"Jim",Password:"Jims Password",Server:"Saskatoon Server"})
em :="Dave"
MsgBox, % "Here is the Password for Dave: " ProfileList[em].Password
     . "`nHere is the Password for Jim: " ProfileList["Jim"].Password
...