Я хотел бы знать, как заставить новое ассигнование в цикле:Как заставить новую привязку в цикле в Lua?
for file in lfs.dir(lfs.currentdir() .. "/content") do
if lfs.attributes(lfs.currentdir() .. "/content/" .. file, "mode") == "file" then
if file:sub(0, 1) ~= "." then
local article = Article:new(lfs.currentdir() .. "/content/" .. file)
table.insert(self.articles[article.lang], article)
end
end
end
Когда я запускаю этот кусок кода через отладчик, я могу увидеть, что переменная статью всегда имеет один и тот же адрес в памяти, так каждый элемент таблицы self.articles
точно такой же.
Как я могу принудительно назначить новое пространство памяти, не удаляя старый (на кого следует ссылаться в таблице)?
Редактировать
Я в настоящее время используют 30log: https://github.com/Yonaba/30log
Статья наследует Содержание класса:
content.lua (часть)
local content = class()
content.__name = "Content"
function content:__init(file_path)
self.title = _("Untitled document")
-- ... other declarations like this, nothing less, nothing more
end
-- Some methods follow
article.lua (полный)
local article = Content:extends()
article.__name = "Article"
function article:__init(file_path)
article.super:__init(file_path)
end
return article
Edit 2
Вызов можно рассматривать "в контексте" здесь: https://github.com/martin-damien/frankenstein/blob/master/pieces/site.lua#L151
Спасибо,
Damien
Если вы объявляете статью за пределами циклов и продолжаете назначать ее в цикле, она работает? – Bill
Пожалуйста, разместите код функции 'Article: new'. Я подозреваю, что там ошибка (в частности, она должна установить 'self' в новую таблицу, и я предполагаю, что это не так.) – finnw
@Bill Это ничего не меняет. –