Пропуск текущего каталога и предыдущего каталога с помощью итератора luafilesystem dir - PullRequest
1 голос
/ 08 апреля 2019

В 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 Ответ

1 голос
/ 08 апреля 2019

Вы можете просто сказать об этом:

for name in lfs.dir(<path>) do
    if name ~= '.' and name ~= '..' then
        local path = <path> .. '/' .. name
        inspect(lfs.attributes(path))
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...