1 (изменено: pahakush, 2023-02-06 05:37:02)

Тема: AHK2: код приводящий к вылету

Подскажите куда отправить баг связанный видимо с анализатором языка, или здесь кто-нибудь может это сделать?
Писал на support@autohotkey.com, сообщения не доставляются, а на гитхабе раздел issues закрыт.

Объект Map позволяет присвоить себя же в качестве значения.
Данный код проходит и скрипт запускается, но, ожидаемо процесс выполнения скрипта убивается в системе без каких-либо сообщений об ошибке при последующем использовании объекта MyMap.

MyMap := Map()
MyMap["myKey"] := MyMap

2

Re: AHK2: код приводящий к вылету

Я ahk v2 не пользуюсь, поэтому проверить не могу.
Но все баги пишут тут:
https://www.autohotkey.com/boards/viewforum.php?f=14

3

Re: AHK2: код приводящий к вылету

pahakush, добро пожаловать на форум! Ознакомьтесь, пожалуйста, с Правилами, отредактируйте свой пост. Обратите внимание на составление заголовков. И используйте, пожалуйста русский язык, это русскоязычный форум.
По теме — покажите код, который приводит у вас к падению. Простой тест не выявил проблем:

#Requires AutoHotkey v2

MyMap := Map()
MyMap["myKey"] := MyMap
MyMap[1] := "test"
MsgBox MyMap["myKey"][1]
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: pahakush, 2023-02-06 07:30:06)

Re: AHK2: код приводящий к вылету

teadrinker
Код полностью, приводящий к вылету

docs := ["txt", "pdf"]

MyMap := Map()
MyMap["documents"] := docs
MyMap["mykey"] := MyMap

MyGui := Gui()
MyGui.Opt("-Caption +ToolWindow -Border")

^3::
{
	mainFunc(MyMap)
	MyGui.Show()
}

mainFunc(arg){

	Static counter := -120

	For key, value in arg
	{
		counter += 120
		if (value is Map) {
		
			arr := Array()
			For key1 in value
			{
				arr.Push(key1)
			}
			
			MyGui.AddListBox( Format("r5 x{1} y{1}", counter), arr)
			mainFunc(value)
			
		} else if (value is Array) {
		
			MyGui.AddListBox( Format("r5 x{1} y{1} Hidden", counter), value)
			
		}
	}
}

p.s. Дело все-таки не в использовании объекта, а в рекурсии, которая уходит в бесконечную с таким объектом. Так-то понятно что я ступил, но как-нибудь предупреждать бы о таких приколах, а то времени убил пока заметил..)

5

Re: AHK2: код приводящий к вылету

Как именно предупреждать-то? В программировании выстрелить себе в ногу можно многими способами.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK2: код приводящий к вылету

Какой-нибудь варнинг на самосодержащийся объект. Отстреливать ноги по самую макушку можно чем-нибудь большим и сложным типа плюсов, где по-невнимательности подобным образом напутать с указателями, а тут недооценил видимо.

7

Re: AHK2: код приводящий к вылету

Так это не проблема — содержать объекту ссылку на самого себя. Ссылка — это просто число. Другое дело, как этим пользоваться. Так-то бесконечный цикл, пожирающий память, можно и без рекурсии устроить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder