Пропуск текущего каталога и предыдущего каталога с помощью итератора luafilesystem dir
В 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
Преимущество заключается в том, что мне не нужно явно проверять, является ли строка '.'
или же '..'
за каждую итерацию. Одним из недостатков является снижение читабельности. Будет ли когда-нибудь случай, когда первые две строки будут разными?
1 ответ
Вы можете просто сказать об этом:
for name in lfs.dir(<path>) do
if name ~= '.' and name ~= '..' then
local path = <path> .. '/' .. name
inspect(lfs.attributes(path))
end
end