在lua中,有前向声明吗?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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() 会更贵一点,如果它可能是本地的。它现在也可以被覆盖。 (编辑:已经提到过) 这是一个公平的观点,我没有想到这一点

以上是关于在lua中,有前向声明吗?的主要内容,如果未能解决你的问题,请参考以下文章

idjl(Sun IDL 编译器)是不是支持前向声明?

我需要相互包含两个头文件,而不是使用前向声明导致“不完整类型”错误

为啥两个程序有前向引用错误而第三个没有?

为啥我不能只用前向声明 C++ 声明一个类的静态成员?

在 Objective-C 中前向声明枚举

C++ 中 typedef 的前向声明