Вторую функцию вызывайте через allwords()() (соответственно, к предыдущему посту: values(t)() -- так можно). Сама функция возвращает функцию-генератор. Функция-генератор -- это такая функция, которая сохраняет некое состояние между её вызовами.
Код |
---|
function allwords ()
local line = io.read() -- текущая строка
local pos = 1 -- текущая позиция в строке
return function () -- итерирующая функция
while line do -- повторяет, пока есть строки
local s, e = string.find(line, "%w+", pos)
if s then -- слово найдено?
pos = e + 1 -- следующая позиция после этого слова
print(string.sub(line, s, e))
return string.sub(line, s, e) -- возвращает это слово
else
line = io.read() -- слово не найдено; пробуетследующую строку
if string.len(line) == 0 then
line = nil
end
pos = 1 -- перезапуск с первой позиции
end
end
return nil -- строк больше нет; конец обхода
end
end
local fetch_next_word = allwords()
while fetch_next_word() do end
|
Этот код будет выводить Вам все слова из введённой строки, пока Вы не введёте пустую строку. Если не проверять на ввод пустой строки, то программа сама не завершится, т.к. пустая строка -- это всё ещё строка (т.е. не nil).