我想知道如何在循环中强制执行新的分配:
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类:
content.lua(part)
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
修改2
可以在此处“在上下文中”查看来电:https://github.com/martin-damien/frankenstein/blob/master/pieces/site.lua#L151
谢谢,
达明
答案 0 :(得分:1)
GitHub存储库中的代码存在一些问题,但可能与该问题相关的问题是this。 Lua表索引从1开始,因此您将nil
指定为文章的默认语言...
如果我修复了这个以及其他事情,例如你不能call a method in the constructor使用30log这样的事实,那么你的代码“有效”(即在这个循环之后,相关表格中有几篇文章)。