Пропуск текущего каталога и предыдущего каталога с помощью итератора 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
Другие вопросы по тегам