Что нового

[Автоматизация] Перезапуск скрипта

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Есть вопрос:
как заставить скрипт выйти из всех имеющихся петель и при этом не остановиться, а начаться с самого начала?
 

pgs2

Новичок
Сообщения
29
Репутация
0
Re: [Автоматизация] Начать с начала

Если выход из цикла по условию то ExitLoop. Если с (N) циклов ExitLoop N. Когда придумывал как обрабатывать нажатие кнопки стоп пришлось в тело скрипта в каждую "петлю" понатыкать проверку на нажатие кнопки.
Код:
If $Stoped = 1 Then ExitLoop 3
 
Автор
N

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Re: [Автоматизация] Начать с начала

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

edyapd

Осваивающий
Сообщения
380
Репутация
30
Re: [Автоматизация] Начать с начала

Не проверял, но думаю что должно сработать:
Перед петлёй
$iLvlSum = $iLvlSum + 1
В самой петле по условию
ExitLoop $iLvlSum
И при выходе из петли
$iLvlSum = $iLvlSum - 1
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: [Автоматизация] Начать с начала

NoMad73rus

1. Я из названия темы ничего не понял, оформи, согласно правилам, иначе тему закрою.
2. Сделай все циклы, кроме основного, в отдельной функции, ну а дальше Return из любого места.

Код:
While 1
	_Main()
WEnd

Func _Main()
	While 1
		While 1
			While 1
				...
				Return
			WEnd
			...
			Return
		WEnd
		...
		Return
	WEnd
EndFunc   ;==>_Main
 
Автор
N

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Название поправил.
Не совсем понял при чём тут Return?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Return - это выход из функции (из любого места внутри этой функции). Таким образом тебе не нужно считать количество циклов и т.д. Просто пишешь Return в любом цикле и выходишь из функции в основной цикл. Ты кажется этого и хотел.
 

pgs2

Новичок
Сообщения
29
Репутация
0
Я так понял вопрос о том " Зачем умные дядьки отменили GoTo?" Наверно чтоб не искать легких путей :laugh: Я где то прочел аргумент от создателей Autoit - " ну зато без GoTo красивее"
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Ну GoTo отменили тогда, когда те же умные дядьки придумали процедуры и функции...

:smile:

И IMHO это правильно.
 

pgs2

Новичок
Сообщения
29
Репутация
0
Yashied сказал(а):
И IMHO это правильно.
В большинстве случаев наверно да. Но вот с переходом на метку, обработка нажатия кнопки "Стоп" выглядела бы элегантнее:
Код:
Func _Stop()
	GoTo начало 
EndFunc

Теперь это (у меня) получилось так:
Код:
Func _Stop()
	If $bStarted = 1 And  $Stoped = 0 Then
        		$bStarted = 0
		$Stoped = 1
	EndIf	
EndFunc

И далее по всему скрипту (чем чаще тем лучше, чтоб реакция на нажатие была более быстрая) :
Код:
If $Stoped = 1 Then ExitLoop 3 ; меняя значения в зависимости от глубины вложения, чтоб выкинуло на "начало"

И IMHO это замусоривание скрипта.
:smile:
Или с помощью процедур или функций можно сделать лучше?
Кстати, дядьки в качестве примера, как "здорово" теперь обходиться без GoTo, приводят построение вечного цикла While 1 - WEnd и выход из него ExitLoop.
 
Автор
N

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
2Pgs2, Да ты прав изначально вопрос стоял именно так: где блин goto!? После погружения в омут цыклов и функций возникла мысль, что с этим надо как то жить...
2Yashied, спасибо за Return, русская справка этого не знает, а читать инглишную поленился, ибо не знал что есть отличия.
 

SyDr

Сидра
Сообщения
651
Репутация
158
1) Return есть в русской справке
2) Версия русской справки - 3.2.5.4. Вышла в 2007 году. История изменений AutoIt за это время составляет около 15 листов A4

Советую прочитать:
Для новичка
Основные понятия
Указатель ключевых слов и выражений
 
Автор
N

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Не надо обвинять меня в невнимательности! В руской справке Return служил только для возврата значений из функции, но ни как не для прерывания функции.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Я не обвиняю. Ну тут я не прав. В рсской справке это действительно не указано (хотя в английской указано, что Return не только возвращает значение, но и выходит из функции)
 
Верх