如何在Lua中强制循环新的赋值?

时间:2013-06-17 20:57:21

标签: 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类:

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

谢谢,

达明

1 个答案:

答案 0 :(得分:1)

GitHub存储库中的代码存在一些问题,但可能与该问题相关的问题是this。 Lua表索引从1开始,因此您将nil指定为文章的默认语言...

如果我修复了这个以及其他事情,例如你不能call a method in the constructor使用30log这样的事实,那么你的代码“有效”(即在这个循环之后,相关表格中有几篇文章)。