Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Работа скрипта вне цикла for
фонарик
сообщение 29.1.2018, 21:30
Сообщение #1


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Я не программист. Поэтому логика этой категории людей мне не всегда понятна. Иногда выручает метод тыка, но не в этот раз (IMG:style_emoticons/default/sad.gif)
Дело в том, что цикл for имеет динамические данные. Такие как окна, с которыми надо работать, и, соответственно, количество сколько раз прогнать этот цикл.
Никак не получается завершить цикл for и начать его заново (IMG:style_emoticons/default/sad.gif) Подскажите пожалуйста как нужно:
Код
init_arr %arr "окошко_01", "окошко_02", "окошко_03"
set #arr_size size(%arr)

:start
for #i 1 #arr_size 1
  gosub mark1
end_for

stop_script
:mark0
// иногда скрипт из цикла приходит сюда
return

:mark1
delete_array %arr -2 //удалим из массива "окошко_02"
set #arr_size size(%arr) //теперь #arr_size = 2 а не 3
goto start // Начать цикл заново с новыми параметрами. ОШИБКА.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 29.1.2018, 21:44
Сообщение #2


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21063
Пользователь №: 16.156



break - выйти из цикла
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.1.2018, 22:03
Сообщение #3


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26744
Пользователь №: 16.971
Возраст: 29



Что вообще нужно сделать?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 29.1.2018, 22:05
Сообщение #4


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Цитата(Cockney @ 29.1.2018, 21:44) *

break - выйти из цикла

Я читал описание процедуры for. Вы куда предлагаете в данном примере вставить это слово? (IMG:style_emoticons/default/unsure.gif)

Цитата(cirus @ 29.1.2018, 22:03) *

Что вообще нужно сделать?

Нужно цикл for стартануть заново с новыми параметрами. Последняя строчка примера.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.1.2018, 22:20
Сообщение #5


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26744
Пользователь №: 16.971
Возраст: 29



Код
init_arr %arr "окошко_01", "окошко_02", "окошко_03"
set #arr_size size(%arr)

:start
for #i 1 #arr_size 1
    gosub mark1
    break
end_for
goto start // Начать цикл заново с новыми параметрами.

:mark1
    log #arr_size
    wait 1000
    delete_array %arr -2 //удалим из массива "окошко_02"
    set #arr_size size(%arr)
return  
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 29.1.2018, 22:32
Сообщение #6


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



cirus,
Ясно. Я просто думал есть какой-нибудь неизвестный мне способ закрыть процедуру действующего цикла извне. Чтобы не заполонять цикл всевозможными проверками. Например, переменные этого цикла не всегда меняются извне и если они не изменились, то цикл нужно продолжать. Придется делать в цикле проверку на флаг, который опять-таки, ставить, проверять, отслеживать где обнулять. Хотелось как-то проще чтобы было (IMG:style_emoticons/default/laugh.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 30.1.2018, 10:27
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27724
Пользователь №: 11.279



Скорее всего прокатит простое имзенение #i и #arr_size, но нужно понимать, что текущий виток при этом отрботает до конца. Чтобы этого не произошло можно использовать continue. Тем не менее я считаю любое из вышеозвученных решений не очень хорошей идеей в плане читаемости кода. Настоятельно рекомендую вынести данный for в отдельную подпрограмму и задавать необходимые значения перед вызовом вне этого цикла. Вы делаете как-то дикий гибрид обычной и callback функции. Глаза потом в узел завяжутся что-то изменять в коде либо искать ошибки.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 27.4.2024, 1:07
Designed by Nickostyle