Пропуск текущего каталога и предыдущего каталога с помощью итератора luafilesystem dir

#lua #luafilesystem

#lua #luafilesystem

Вопрос:

В 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
  

Преимущество в том, что мне не нужно явно проверять, является ли строка '.' or '..' для каждой итерации. Одним из недостатков является снижение удобочитаемости.
Будет ли когда-нибудь случай, когда первые две строки отличаются?

Ответ №1:

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

 for name in lfs.dir(<path>) do
    if name ~= '.' and name ~= '..' then
        local path = <path> .. '/' .. name
        inspect(lfs.attributes(path))
    end
end
  

Комментарии:

1. Это то, чего я пытаюсь избежать. Возможно, мне придется пересмотреть.