Что нового

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

Belfigor

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

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

Yashied

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

Belfigor

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

axlwor

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

Belfigor

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

Garrett

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

Belfigor

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

Yashied

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

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


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

P.S

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

Код:
Global $Var = Default

...

If $Var = Default Then ...

...
 

dwerf

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

необходимо получить из 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 591
Репутация
938
Ну я и так всегда с MustDeclareVars пишу, мне просто стало интересно можно ли удалить переменную, физически стереть ее из скрипта так, чтобы при ссылке на нее скрипт жаловался что такой переменной нет вообще :smile:
 

axlwor

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

Garrett

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

dwerf

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