Что нового

Проверка существования переменной

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Использую MustDeclareVars, 1. Как в коде организовать проверку на существование переменной? Я пытаюсь реализовать нечто типа этого:
Код:
If Not VarExist($var) Then Global $var = "чему-то"

То есть если переменной до проверки не существовало, то создать ее и присвоить ей какое-то значение. Как реализовать такое в автоите?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
If Not IsDeclared('Var') Then $Var = "чему-то"
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
К вопросу о проверке существования переменной. А можно ли переменную как-то уничтожить? Чтобы IsDeclared вернул отрицательное значение? В хелпе ссылки из этой команды идут только на Eval и Assign :(
 

axlwor

Скриптер
Сообщения
657
Репутация
147
-1 для Local
А что за задача, когда нужно "удалить" переменную?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Нееее ну отрицательное я имел ввиду что "такой переменной не существует". То есть я создаю переменную путем local global или же dim, далее применяю к этой переменной некую команду и IsDeclared возвращает 0. Пока не придумал, просто любопытствую. В хелпе команды удаления переменной не обнаружил :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Belfigor [?]
То есть я создаю переменную путем local global или же dim, далее применяю к этой переменной некую команду и IsDeclared возвращает 0.
В этом случае IMHO переменную нужно удалить из памяти, так как она уже создана.
А простое обнуление не подходит?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Подходит и обнуление, но интересна именно возможность удаления переменной средствами автоит.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Belfigor, вижу ты пошел по неверному пути. Хороший стиль программирования, это однозначное определение всех глобальных и локальных переменных. Для чего тебе понадобилось "уничтожать" переменную? Если она не нужна, то вообще не стоит ее объявлять. То, что ты имеешь в виду, называется структура. Выделяешь для нее память, используешь, а когда стала не нужна, освобождаешь выделенную под нее память. А если тебе необходимо просто проверить инициализирована та или иная переменная или нет, то тут есть масса вариантов (0, -1 и т.д.). Мой тебе совет, используй всегда

Код:
Opt('MustDeclareVars', 1)


и объявляй заранее в начале программы (функции) все необходимые глобальные (локальные) переменные. И будет тебе всегда светить солнце.

P.S

IsDeclared() в основном применяется для обеспечения совместимости в разных версиях AutoIt или при написании UDF библиотек (опять же для совместимости). A еще для проверки инициализации переменной можно использовать "Default".

Код:
Global $Var = Default

...

If $Var = Default Then ...

...
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Мне например недавно приходилось решать такую задачу:

необходимо получить из html-документа ссылки и адреса картинок для последующей обработки. После получения ссылок переменная с текстом больше не нужена. Использовать для этого функцию с локальными переменными - имхо лишние строчки в скрипте, так как это надо сделать только один раз за всю работу скрипта.

Как это оформить в хорошем стиле?

Код:
$sText = FileRead('index.html')

$aLinks = StringRegExp($sText, '<a.*?href="(.*?)"', 3)
$aImages = StringRegExp($sText, '<img.*?src="(.*?)"', 3)

For $sElement In $aLinks
	ConsoleWrite($sElement & @LF)
	;...
Next

For $sElement In $aImages
	ConsoleWrite($sElement & @LF)
	;...
Next
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну я и так всегда с MustDeclareVars пишу, мне просто стало интересно можно ли удалить переменную, физически стереть ее из скрипта так, чтобы при ссылке на нее скрипт жаловался что такой переменной нет вообще :smile:
 

axlwor

Скриптер
Сообщения
657
Репутация
147
надо вспоминать как работают компиляторы. когда они "оставляют" память под переменные, когда "делают" структуры.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
dwerf [?]
После получения ссылок переменная с текстом больше не нужена.
Если вам переменная не нужна, так используйте её ещё где-нибудь, чтобы не плодить лишние переменные. Она ведь и называется поэтому - переменная.
К примеру $Result - будет хранить переменный результат, и может содержать все, что туда положите.
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Garrett [?]
Если вам переменная не нужна, так используйте её ещё где-нибудь, чтобы не плодить лишние переменные. Она ведь и называется поэтому - переменная.
К примеру $Result - будет хранить переменный результат, и может содержать все, что туда положите.

Можно конечно так извернутся, но это затруднит чтение кода. Надо будет смотреть результатом чего является $Result в данный момент.
 
Верх