Что нового

Как правильно использовать команду ExitLoop

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Суть вопроса вот в чем есть цикл скажем структурно он выглядит так

Код:
While 1
	If ... Then
		Sleep(1)
	EndIf
	If ... Then
		ExitLoop
	EndIf
WEnd


есть две необходимости

первая необходимо ExitLoop использовать из функции для этого цикла вот так
Код:
While 1
	If ... Then
		Sleep(1)
	EndIf
	If ... Then
		_Exit()
	EndIf
WEnd

Func _Exit()
	ExitLoop
EndFunc


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

и вторая необходимость, это когда используются вложенные друг в друга циклы While...WEnd и For...In...Next где 3 , а где и 5 вложенностей , если использовать ExitLoop 5 этот оператор будет выходить из циклов с меньшей вложенностью или скажем есть способ указать выйти из всех текущих циклов с помощью команды ExitLoop или есть специальная команда для таких случаев? а то у меня не получается выйти из циклов, вот собственно и вопрос, выход из цикла не происходит из за моей ошибки или ExitLoop 5 это не вариант для выхода из циклов разной вложенности.
заранее благодарен за помощь
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
ExitLoop выходит из любой вложенности. Применяется только внутри циклов. Как счас написано
Код:
Func _Exit()
    ExitLoop
EndFunc
-это неправильно, о чем вас и предупреждает проверка ошибок.
Я думаю нет способа выйти из всех циклов, без явного укаказания количества. Т.е варианта exitloop 1000 не проходит ..
В вашем случае "ExitLoop 5" - ошибка в том, что у вас нет 5 вложенных циклов, их меньше, пересчитайте..
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
inververs [?]
-это неправильно, о чем вас и предупреждает проверка ошибок.
спасибо за разъяснение значить придется городить целый огород :smile:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Обычно огород такой:
Код:
While 1
    If ... Then
        Sleep(1)
    EndIf
    If ... Then
        $iRet = _Exit() ;немного доработает
		;2 способа узнать, нужно ли выйти из цикла
		;1 Проверим возвращаемое значение
		If Not $iRet Then ExitLoop ;Функция ничего не возвратила ;Значит выходим из цикла
		;2 способ, проверим на ошибки.
 		;If @error Then ExitLoop ;выходим из цикла, т.к функции вернула ошибку.
    EndIf
WEnd

Func _Exit()
	;Какие то проверки
	;Сработала проверка что необходимо выйти из цикла.
	;Делаем так
	Return SetError(1,0,0)
EndFunc
 
Верх