#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. Это то, чего я пытаюсь избежать. Возможно, мне придется пересмотреть.