|
|
|
-Счётчик, -Lua- |
|
|
Levo222 |
5.7.2020, 12:29
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 5.7.2020, 16:19) Если окно не найдено, то h будет nil. Поэтому workwindow (h [1][1]) вернёт ошибку, потому что массива h не существует. Если окно будет найдено, то h будет таблицей. Поэтому if h > 0 then вернёт ошибку, потому что таблицу нельзя сравнивать с 0. Код --lua local h = findwindow("Pilot")
if h then -- если окно найдено -- нужные действия workwindow (h [1][1]) log('Окно найдено') else log('Окно не найдено') end Я убрал >, всёравно выдает nil Цитата(Levo222 @ 5.7.2020, 6:13) Код local W = findwindow(window_name[i]) log('Имя окна: ' .. window_name[i]) if W then
Что означает в данном случае if W then ? Если окно существует? Но ведь это может означать и = 0, и > 0, и > 10, Это ведь не точная команда? А это разве не сравнение с 0? Ведь по сути if W then это if W ~=0 И почему тут ошибку не возвращает?
|
|
|
|
Levo222 |
5.7.2020, 12:48
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 5.7.2020, 16:35) Естественно. Над этим подумайте: Код --lua do local h = 123 -- переменная h существует только в этом блоке end
-- тут переменной h не существует log (h) ППц, а я думаю почему не видит... Цитата local h = 123 -- переменная h существует только в этом блоке
А в чём разница сравнения переменной присвоенной окну с nil и с 0?просто с 0 ошибку выдаётА всё понял, это логический тип. Но это полбеды. Оказывается основная проблема была в записи log ("Такого типа"), при удалении которой всё заработало.
|
|
|
|
Levo222 |
5.7.2020, 13:44
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Область видимости переменных Теперь у меня на alarm ("выхожу.wav") count[forcount] = 1 -- записываем что он заполнен/бракованный выдаёт nil table Сама Исходный код for forcount=1, 3 do log (count[forcount]) if count [forcount] == 0 then log (H[forcount][1], H[forcount][2]) log (count[forcount]) alarm ("Выбор контейнера.wav") move (H[forcount][1], H[forcount][2]) wait(100) left (H[forcount][1], H[forcount][2]) wait(300) send217 ("Enter") wait(100) while InWorld (10, 100) ~= 0 do --ждём загрузку if InWorld (10, 100) == 0 then break else end wait(200) end --count[forcount] = 1 --присвоили break else end end Находится выше, но вроде бы в том же блоке while. А попытка присвоить count значение в другом цикле ниже выдаёт ошибку Какие еще блоки ограничивают видимость переменной? Я так понимаю проверку переменой счётчика можно вкладывать только в область цикла его проверки? -- Правило 1.18Сообщение отредактировал Fors1k - 5.7.2020, 16:27
|
|
|
|
Levo222 |
5.7.2020, 15:11
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 5.7.2020, 18:34) И что? Будет другое значение, вот и все.
Не видна переменная forcount, а массив count виден, т. к. объявлен до цикла.
Так, мне надо узнать когда все 3 будут заполнены. А вот тут: Код local count = {0, 0, 0}
for forcount=1, 3 do log (count[forcount]) if count [forcount] == 0 then --log ('Есть свободные') log (H[forcount][1], H[forcount][2]) log (count[forcount]) move (H[forcount][1], H[forcount][2]) wait(100) left (H[forcount][1], H[forcount][2]) wait(100) count[forcount] = 1 --присвоили 1 конкретному шагу, а как узнать #текущего шага? --что-то делаем с ним else --текущий использовался end end Вот что я хочу - узнать полностью ли прошёл цикл for и сколько шагов он проделал т.е. на каком участке local count = {0, 0, 0} он находится Чтобы понять 1 это 2-й или 3-й? Т.е. чтобы в конце проверить Код if count == 1 then while count == 1 do wait (1000) hint ('Заполнено') wait (1000) end else end Если полные то что-то делать, если нет то заново запускать. Но так чтобы уже не внутри цикла for forcount это проверять -- Правило 1.8Сообщение отредактировал Fors1k - 5.7.2020, 16:25
|
|
|
|
Levo222 |
5.7.2020, 15:27
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 5.7.2020, 19:24) Добавить переменную, в которую записывать сколько раз выполнилось условие.
Хах, но мне то надо за циклом проверять, а за ним эта переменная тоже не будет видна. Как я её присвою если для этого мне надо будет выйти за пределы цикла for forcount, а если я выйду то он начнётся заново? Цитата(Levo222 @ 5.7.2020, 19:11) Т.е. чтобы в конце проверить Код if count == 1 then while count == 1 do wait (1000) hint ('Заполнено') wait (1000) end else end Если полные то что-то делать, если нет то заново запускать. Но так чтобы уже не внутри цикла for forcount это проверять -- Правило 1.8
Можно было написать [..codebox..] [../codebox..] и не тыкать тут правилами. Я откуда знаю как он пишется этот кодебокс. Сообщение отредактировал Levo222 - 5.7.2020, 18:14
|
|
|
|
Fors1k |
5.7.2020, 19:48
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2397
Пользователь №: 18.746
|
Re Levo222
Цитата(Levo222 @ 5.7.2020, 15:27) Можно было написать [..codebox..] [../codebox..] и не тыкать тут правилами. Я откуда знаю как он пишется этот кодебокс. Благодарю за совет о том, что мне можно было написать. Модератор правилами не "тыкает", а напоминает про них, и следит за их соблюдением. Что, и как пишется описано здесь, а также приведена иная важная информация.
--------------------
Для связи
|
|
|
|
Fors1k |
5.7.2020, 22:10
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2397
Пользователь №: 18.746
|
Для того, чтобы не путаться в областях видимости, следует писать local только там, где это нужно, а именно внутри блока кода. В этом примере сразу понятно какая переменная где будет видна, и для чего был использован модификатор local. Код --lua a = 5 -- переменная глобальна do local b = 22 -- переменная локальна относительно всего скрипта c = 57 -- переменная глобальна end log(a);log(b);log(c) Способ запутаться: Код --lua local a = 5 -- переменная локальна относительно...чего? всего на свете? do local b = 22 -- переменная локальна относительно всего скрипта c = 57 -- переменная глобальна end log(a);log(b);log(c) Читаем код: В глобальной области объявили локальную переменную. Уже интересно, так как эти слова - антонимы. b сделали локальной, тут понятно. с сделали глобальной. a вроде тоже глобальная, но объявляли мы ее локальной. Получается a и c в разных областях видимости? Все, пользователь в тупике))
--------------------
Для связи
|
|
|
|
Levo222 |
6.7.2020, 23:10
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(Fors1k @ 5.7.2020, 23:48) Благодарю за совет о том, что мне можно было написать. Модератор правилами не "тыкает", а напоминает про них, и следит за их соблюдением. Что, и как пишется описано здесь, а также приведена иная важная информация. Легко теорезировать и бросаться терминами имея академическое образование, или 10 -летний опыт за спиной, когда в вас преподаватели на протяжении 5-ти-10 лет эти знания впинывают. А потом сидеть тут и умничать. Зайди на юридический форум, я тебе там такими терминами заверну про пространственно временные коллизии и их видимость в правовых полях, и дилекную правоспособность акцептената с оферентом, и примеров накидаю кучу, чтобы ты в них потонул к @ерам собачьим - убежишь оттуда в ужасе с больной головой, и скажешь - "Мне же только вот это надо было...". А я скажу: "Не Е@ет, иди учи теорию!" Я сомневаюсь что такой как ты готов к отдаче. Так что лучше не суй нос туда, где ты еще "пороху" не нюхал. Сегодня применил власть ты - завтра применят в отношении тебя. ----------------------------------------- Дали потсону модерку поиграться. Людям нужен эффект, а не ваше умничание на тему контенций, правовых полейполей видимости, акцептенатов и референтов.
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|