2013-09-09 5 views
0

Я новичок в lua и пытаюсь написать код для отправки информации в текстовый файл, который перезаписывается каждым циклом цикла. Информация, отправленная в текстовый файл, отличается на основе значения, которое увеличивается до определенного известного номера (3 для этого примера), а затем уменьшается ниже этого числа в любом порядке.Цикл WHILE для начала, только когда условие ELSEIF истинно

Вот где я застрял:

Я хочу послать другую информацию в текстовый файл, используя одни и те же значения , но в зависимости от того достиг 3 или нет значение, если это имеет смысл.

Пример на английском языке:

  • , если значение и не достиг 3 затем записать: UP 2
  • , если значение и достиг 3 затем записать: DOWN 2
  • если значение затем напишите: TOP

Мой вопрос:

Могу ли я получить бесконечное время цикла начать внутри другойбесконечное время цикла когда значение соответствует определенное elseif состояние. Я хочу попытаться использовать структуру цикла ниже, если это возможно.

Мой код выглядит примерно так:

while true do 
    file = assert(io.open("file.txt","w+")) 
    value = ipc.readSD(0x0BE8) 
     if value = 0 
     file:write("UP 0") 
     file:close() 
     elseif value = 1 
     file:write("UP 1") 
     file:close() 
     elseif value = 2 
     file:write("UP 2") 
     file:close() 
     elseif value = 3 
     file:write("TOP") 
     file:close() 
      --How do I trigger/start this inner loop? 
      while true do 
      --now stay in here until break 
      file = assert(io.open("file.txt","w+")) 
      value = ipc.readSD(0x0BE8) 
        if 
         value = 0 
         file:write("DOWN 0") 
         file:close() 
         break 
        elseif 
         value = 1 
         file:write("DOWN 1") 
         file:close() 
        elseif 
         value = 2 
         file:write("DOWN 2") 
         file:close() 
        else 
         break 
     else 
     file:write("OUTSIDE") 
     end 
end 

ответ

1

Есть несколько синтаксических ошибок в коде, он не должен составить вообще.

  • Использование == для сравнения равны вместо =
  • Для каждого if/elseif, всегда должен быть соответствующий then.
  • Для каждого if/while/do блока, всегда должен быть соответствующим end.

Что касается вашего вопроса, если я правильно понимаю, вы можете использовать goto для имитации continue, когда вы не хотите, чтобы ввести внутренний цикл:

while true do 
    value = getValue() 
    if value == 1 then 
     --not enter inner loop 
     goto continue 
    elseif value == 2 then 
     --enter inner loop 
    end 
    while true do 
     --inner loop 
    end 
    ::continue:: 
end 
+0

Спасибо большое его работы сейчас – user2759802