Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Аналог goto (http://forum.oszone.net/showthread.php?t=146070)

Frost_Imp 24-07-2009 11:22 1176364

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

beve 24-07-2009 12:11 1176419

Цитата:

Цитата Frost_Imp
Есть ли аналог функции goto либо какой-нибудь способ редиректа выполнения скрипта с определенного места? »

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

Frost_Imp 24-07-2009 12:22 1176429

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

beve 24-07-2009 13:19 1176477

Цитата:

Цитата Frost_Imp
Синтаксис функции и ее вызова в двух словах напомните, пожалуйста »

Код:

; код

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

; код

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

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

Frost_Imp 24-07-2009 13:31 1176489

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

Frost_Imp 24-07-2009 15:42 1176600

Попробовал... Не выходит. Ткните носом плиз в ошибку...
Скрипт выносить весь не буду, покажу его структуру
Код:

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 1176659

Цитата:

Цитата Frost_Imp
скрипт завершается... Почему? »

Потому что синтаксис неправильный у 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 1176676

Извиняюсь, допустил неточность при написании. В коде у меня синтаксис правильный
Код:

If $var1 = "1842204" And $var2 = "9699377" Then
    sleep (60000)
    get_health()
    EndIf


Creat0R 24-07-2009 17:14 1176702

Цитата:

Цитата Frost_Imp
другие функции не выполняются »

Значит условие не выполняется (т.е оно не является True - истина).


Время: 05:24.

Время: 05:24.
© OSzone.net 2001-