В LuaFileSystem lfs.dir(<path>)
перебирает содержимое каталога в виде строк.Если бы я хотел напечатать атрибуты содержимого каталога, я мог бы сделать это следующим образом (используя inspect.lua для печати представления таблицы, читаемой человеком):
for name in lfs.dir(<path>) do
local path = <path> .. '/' .. name
inspect(lfs.attributes(path))
end
Однако первые две строки изкажется, что итератор всегда равен '.'
и '..'
(запись оболочки для текущего каталога и предыдущего каталога).Это приводит к ошибкам в моем коде, поскольку <path> .. '/' .. '.'
никогда не является файлом или каталогом.
Я начал пропускать их, дважды продвигая состояние перед циклом.
local it, state = lfs.dir(path)
state:next()
state:next()
for file_name, _ in it, state, nil do
-- stuff
end
Преимущество состоит в том, чтоМне не нужно явно проверять, является ли строка '.'
или '..'
для каждой итерации.Одним из недостатков является снижение читабельности.Будет ли когда-нибудь случай, когда первые две строки будут разными?