如何在lua类中编写私有函数

如何在lua类中编写私有函数,lua,Lua,我试图用私有函数编写lua“类”,如下所示: local myTable = {} function myTable.func() private() end local function private() print(":O") end return myTable 假设我需要“myTable”,然后运行myTable.func()我会得到一个错误,该错误表示“private”未定义 我找到了两种解决方法: 1) 将“private”函数移到“func”之前 2) 在

我试图用私有函数编写lua“类”,如下所示:

local myTable = {}

function myTable.func()
    private()
end

local function private()
    print(":O")
end

return myTable
假设我需要“myTable”,然后运行myTable.func()我会得到一个错误,该错误表示“private”未定义

我找到了两种解决方法:

1) 将“private”函数移到“func”之前 2) 在“func”之前定义“local private”,并将private的签名更改为“function private”

但是我不太清楚他们为什么工作,以及哪种是最常见的方式,很高兴有人能帮我理解,泰:)

哪一种是常见的方式

这两种方法都是可取的。第二种方法是在两个函数相互调用的情况下需要的,这两个函数都需要是本地的,而不是在一个表中

您可以始终使用第二种样式,从而保持一致性,尽管它的可读性可能不如您需要在代码中的其他位置查看函数是否是本地的

然而,为了可读性和更短的代码,我将使用第一种方法,这样我就不需要对本地函数进行单独的“声明”

我不太明白他们为什么工作

原始代码无法工作的原因是由于局部变量作用域。 从lua参考手册:

Lua是一种词汇范围的语言局部变量的范围 从声明后的第一个语句开始,持续到 最内层块的最后一个非void语句,包括 声明

因此,在原始代码中,变量
private
仅在定义行之后定义为函数。代码失败是因为您试图在该行之前的代码中使用它

这些方法之所以有效,是因为它们都将局部变量范围移动到使用变量的代码上方

您可能需要阅读参考手册中有关局部变量和范围的内容: