【问题标题】:In lua, is there forward declaration?在lua中,有前向声明吗?
【发布时间】:2021-04-27 04:48:03
【问题描述】:

我用 lua 写了很多相互调用的函数。

lua中是否有“前向声明”这样的概念?

这将允许我声明所有没有实现的函数,然后再实现它们。然后我会摆脱函数的顺序问题。

【问题讨论】:

    标签: function lua forward-declaration


    【解决方案1】:

    是的,可见性从上到下。 你可以声明没有价值的本地人。

    local func -- Forward declaration. `local func = nil` is the same.
    
    local function func2() -- Suppose you can't move this function lower.
        return func() -- used here
    end
    
    function func() -- defined here
        return 1
    end
    

    【讨论】:

    • 为了对称,也将func2 声明为本地。
    • 谢谢lhf,这样会更有意义
    【解决方案2】:

    您可以在表格中定义您的函数。

    local lib = {}
    
    function lib.func2()
        return lib.func()
    end
    
    function lib.func()
        return 1
    end
    

    这可以最大限度地减少文件顶部所需的特定声明。 它确实增加了索引表的成本,这可能是相关的并且值得注意。

    如果您要返回库,这也会公开函数,如果某些函数打算对文件中的代码“私有”,则可能不需要这样做。在这种情况下,我们可以添加第二个表

    local lib = {}
    local private = {}
    
    function lib.func2()
        return private.func()
    end
    
    function private.func()
        return 1
    end
    
    return lib
    

    【讨论】:

    • 这也是一个好方法,例如当您将其导出为库时。但是,您应该提到调用lib.func() 会更贵一点,如果它可能是本地的。它现在也可以被覆盖。 (编辑:已经提到过)
    • 这是一个公平的观点,我没有想到这一点
    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多