В скриптовом языке QLua есть 3 вида циклов (for, while и repeat):
1. FOR - DO - END имеет 2 типа:
-- 1-й тип: -- Цикл сделает 10 итераций, увеличивая каждый раз переменную i на 1, т.е. i будет меняться от 0 до 9, -- переменная i является локальной для цикла, т.е. видна только внутри него for i = 0, 9, 1 do A = A*2; end; -- Данный цикл можно было записать и без 3-го аргумента, потому что по умолчанию он равен 1 for i = 0, 9 do A = A*2; end; -- Но вместо 1 можно использовать любое другое число, или выражение, результат которого является числом -- Например так, цикл сделает только 5 итераций и остановится, потому что в 6-й итерации i будет равна 10 (0,2,4,6,8,10), а 10 > 9 for i = 0, 9, 2 do A = A*2; end; -- Здесь используется выражение, т.е. каждая итерация увеличивает переменную i на 2 for i = 0, 9, 1+1 do A = A*2; end; -- Можно сделать цикл на убывание for i = 9, 0, -1 do A = A*2; end; -- 2-й тип: -- Такой вариант при каждой итерации записывает в i индекс, а в value значение элемента из массива Array, -- перебирая, таким образом, все элементы в массиве типа {[1] = 10, [2] = "Текст", [3] = 50} for i,value in ipairs(Array) do -- здесь какой-то блок кода end; -- Такой вариант при каждой итерации записывает в key ключ, а в value значение элемента из массива Array, -- перебирая, таким образом, все элементы в массиве типа {red = "Красный", green = "Зеленый", blue = "синий"} for key,value in pairs(Array) do -- здесь какой-то блок кода end; |
2.WHILE - DO - END
while A < 10 do -- здесь какой-то блок кода end; -- Читается так: ПОКА выполняется условие A меньше 10 ВЫПОЛНЯТЬ(делать) блок кода КОНЕЦ |
3.REPEAT - UNTIL
repeat -- здесь какой-то блок код until A < 10 -- Читается так: ПОВТОРЯТЬ блок кода ДО ТОГО, пока не выполняется условие A меньше 10 |
Для того, чтобы досрочно выйти из любого, вышеописанного, цикла служит оператор break.
Пример использования:
for i = 0, 9, 1 do if i >= 2 then break; end; -- цикл завершится на 3-й итерации (0,1,2) end; |
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!
Ещё одна попытка
Подскажите, что тут не так?
function OnCalculate(indx)
if indx = high then
high = price
end
end
message("Значение high = " ..high);
return high
end
end
Не получается от править код! отображается только часть!
Здравствуйте, пришлите код мне на почту reply@quikluacsharp.ru я вставлю его корректно.
Привет всем! Подскажите, пожалуйста, что не так с этим кодом? Перебирает все свечи в источнике, соединяет максимумы, а надо найти и отрисовать ХАЙ за период.
Вы внутри цикла не получаете новый HIGH для следующей свечи, а вызываете price = H(indx) только 1 раз перед циклом
Поправить
Поправил, благодарю!
Дмитрий, в некоторых языках есть оператор выхода не из цикла (break), а из текущей итерации, что-то навроде "Продолжить", "Continue"
While Run do
if (чего-то не хватает пока, поэтому не будем дальше идти) then
continue
end
.........
.......
end
Да, и сам вопрос в Lua это есть?
Здравствуйте, нет, к сожалению, только что-то городить остается из if-ов
Здравствуйте, ничего городить не надо. В любом случае проверку для "Continue" делать. В примере repeat until лишний "end"
Здравствуйте! Городить все таки приходится. Вот пример, если бы было continue:
а вот та же самая задача без continue:
Т.е. приходиться вкладывать if'ы друг в друга. На таком простом примере это не кажется проблемой, но в реальном коде совсем не удобно, что нельзя в любом месте цикла всего одним оператором перейти в его начало.
Нет, пример не правильный. Если А 10.
Что если А 10 ?
Да ничо)) просто повыкидывало условия и усё))
🙂
Дмитрий, уезжайте с этого вордпреса или наладьте. Вы не устали править?
Если А больше 5 - не значит, что В больше 10, пример не правильный
Хорошо, приведу Вам более реальный пример, если А, В Вам не нравятся 🙂 :
Хотя, тоже не очень удачный пример, но, думаю, так понятнее смысл
Хорошо, куда вы вставите sleep ?
между 10-й и 11-й строкой
а лучше между 2 и 3, то "залипос" будет 🙂
Если А == 10, то в обоих примерах что-то делаем
Если А меньше 5 (пример 1) То В не проверяется, а в примере 2 проверяется
Во втором примере если А меньше 5, то код не перейдет на 4 строку даже, не говоря о втором условии
Короче мы поняли друг друга - "continue" не нужна, если не можешь сделать блок If, то нет смысла и в "continue", только путаница будет. Поэтому Арка и не переходит на 5,2 dll - а там есть даже оператор goto который вообще то облегчил бы некоторые задачи существенно.
Я был бы рад, если бы было continue, если честно, но и без него можно обойтись вполне
function OnCalculate(index)
if index < Settings.period then
return nil
else local sum = 0
for i = index-Settings.period+1,
index do sum = sum +C(i) end return sum/Settings.period
end
end
Ребят вот хоть убей не понимаю эту строчку "for i = index-Settings.period+1,", вот единица в конце, зачем она нужна (+1).??Заранее большое спасибо за ответ!
Видимо это для того, чтобы не обратиться к свече по индексу 0, т.к. они с 1 начинаются
Спасибо!
Всегда пожалуйста 🙂
Нет, пока не набралось достаточное кол-во свечек - нет смысла рассчитывать среднюю.
странно, у меня знак ">" отображается как "& g t ;" вот )
Спасибо, Леонид! Исправил.
Нет уж, Вам спасибо за шикарный сайт!
Еще вопросик, в конце статей есть переходы на предыдущую запись и следующую, я почему-то подумал, что переходы соответствуют дереву содержания в левой колонке, но как-то так.
Если я не ошибаюсь, они по дате добавления записи работают.
Добрый день, Дмитрий!
Помарочка: "10 (0,2,4,6,8,10), а 10 > 9"
здравствуйте!
n =3
вот код и этот,который использую.месидж показывает все равно работает код. я не правильно больше меньше установил?первый вариант правильный?его не использовал а второй.задача прикол-ве эн раз выйти из цикла и перейти дальше по программе.пришлось циклом if делать а этот работает.
for i = 0n dofor i = 0, n do
if i >= 2 then break; end; -- цикл завершится на 3-й итерации (0,1,2)
end;
if i = 2 then break
end -- цикл завершится на 3-й итерации (0,1,2)
end
да и какой из этих циклов самый короткий.for i .while A < 10 do ... .
while A < 10 do .здесь а -? 10 это n.
break выход из цикла а return ? что после ретурна нужно. программа останавливается без ошибок .нил пока не пробовал труе останавливается.
и если знаете как сделать цикл с удалением через сколько то циклов .покороче.одни элементы используются несколько раз. луа это круто может.
Lua робот язык скрипт while хорошо, медленно, быстро n=500 так лучше...
Вы поняли, что я Вам написал?
такой цикл выведет 3 сообщения:
i = 0
i = 1
i = 2
Вам это было нужно, или что-то другое ?