Вы смешиваете два возможных способа записи: for
l oop:
a )
for i=1,10 do
print(i, "This loop is for counting up (or down) a number")
end
b )
for key, value in ipairs({"hello", "world"}) do
print(key, value, "This loop is for using an iterator function")
end
Первый, как вы можете видеть, просто считает число, i
в данном случае. Второй очень обобщенный c и может использоваться для итерации почти всего (например, с использованием io.lines
), но чаще всего используется с pairs
и ipairs
для итерации по таблицам.
Вы также не пишете for ... in tab
, где tab
- таблица; вы должны использовать ipairs
для этого, который затем возвращает итератор для таблицы (которая является функцией)
Вы также неправильно используете string.gmatch
; он не возвращает таблицу, но выполняет функцию итератора для совпадений шаблона в строке, поэтому вы можете использовать его следующим образом:
local matches = {}
for word in some_string:gmatch("[^ ]") do
table.insert(matches, word)
end
, который дает вам фактическую таблицу, содержащую совпадения, но если вы собираетесь перебирать только эту таблицу, вы можете использовать gmatch
l oop напрямую.
for i=1, v in mytable do
count = i+1
end
Я думаю, вы просто пытаетесь подсчитать элементы в таблице здесь? Вы можете легко получить длину таблицы с помощью оператора #
, поэтому #mytable
Если у вас есть строка типа hh:mm:ss
, но часы и минуты могут отсутствовать, проще всего было бы просто заполнить их нулями. Несколько хакерский, но короткий способ добиться этого - просто добавить "00:00:"
к вашей строке и найти в ней последние 3 цифры:
local hours, minutes, seconds = ("00:00:"..inputstr):match("(%d%d):(%d%d):(%d%d)$")
Если ничего не пропущено, у вас получится что-то вроде 00:00:hh:mm:ss
, для которого вы берете только последние 3 значения, чтобы получить правильное время.