PDA

Показать полную графическую версию : Аналог goto


Frost_Imp
24-07-2009, 11:22
Приветствую!
Такой вопрос: насколько я знаю, в AutoIT (по крайней мере в последних верчиях) нет функции goto, которая позволяет выполнять скрипт, состоящий из автономных кусков. Потятно, что есть многочисленные функции одиночных (if... else) и закольцованных (while... wend) циклов, но это все не подходит.
Есть ли аналог функции goto либо какой-нибудь способ редиректа выполнения скрипта с определенного места? Как вариант, может возможно из одного скрипта запустить другой? Я как то пробовал (run кажется), но скрипт после запуска таким методом попросту не выполнялся...

beve
24-07-2009, 12:11
Есть ли аналог функции goto либо какой-нибудь способ редиректа выполнения скрипта с определенного места? »
А чем не устраивает то что можна создать свою функцию (любой код) и потом вызывать эту функцию из нужного места скрипта?

Frost_Imp
24-07-2009, 12:22
мммм... Кстати - как вариант... Как то я эту особенность упустил... Синтаксис функции и ее вызова в двух словах напомните, пожалуйста

beve
24-07-2009, 13:19
Синтаксис функции и ее вызова в двух словах напомните, пожалуйста »
; код

_a() ;вызов функции _a()

; код

Func _a()
;какой то код
EndFunc

В зависимости от того, сколько раз будет вызываться нужная функция, и какие результаты от ее вызова нужны, переменные в ней могут быть или локальные (после завершения обработки этой функции они удаляются) или глобальные (значения в этих переменных не удаляются и могут быть использованы для подальшей обработки)

Frost_Imp
24-07-2009, 13:31
Да мне-то наверное передавать в функции ничего не нужно, просто в зависимасти от тех или иных результатов выполнять ту или иную функцию. Сейчас буду пробовать, спасибо за совет!

Frost_Imp
24-07-2009, 15:42
Попробовал... Не выходит. Ткните носом плиз в ошибку...
Скрипт выносить весь не буду, покажу его структуру

get_check() ;вызываю функцию проверки

Func one()
;код функции one
EndFunc

Func two()
;код функции two
EndFunc

Func get_check()

if
;условие 1
then
one() ;если условия одни - вызываю функцию one
endif

if
;условие 2
then
two() ;если условия другие - вызываю функцию two
endif

if
;условие 3
then
get_check() ;если условия которые нужны не выполняется - запускаю эту функцию снова
endif

EndFunc

Соответственно проблема в том, что функция get_check запускается, проверка проводится, но другие функции не выполняются, то есть скрипт завершается... Почему?

Creat0R
24-07-2009, 16:36
скрипт завершается... Почему? »
Потому что синтаксис неправильный у If...Then...

get_check() ;вызываю функцию проверки

Func one()
;код функции one
EndFunc

Func two()
;код функции two
EndFunc

Func get_check()
If 1 = 1 Then ;условие 1
one() ;если условия одни - вызываю функцию one
EndIf

If 1 = 1 Then ;условие 2
two() ;если условия другие - вызываю функцию two
EndIf

If 1 = 1 Then ;условие 3 - плохая идея
get_check() ;если условия которые нужны не выполняется - запускаю эту функцию снова
EndIf
EndFunc

См. справку по If...Else...Then.

Frost_Imp
24-07-2009, 16:48
Извиняюсь, допустил неточность при написании. В коде у меня синтаксис правильный
If $var1 = "1842204" And $var2 = "9699377" Then
sleep (60000)
get_health()
EndIf

Creat0R
24-07-2009, 17:14
другие функции не выполняются »
Значит условие не выполняется (т.е оно не является True - истина).




© OSzone.net 2001-2012