3 lua
我试图用私有函数编写lua“类”,如下所示:
local myTable = {}
function myTable.func()
private()
end
local function private()
print(":O")
end
return myTable
Run Code Online (Sandbox Code Playgroud)
让我们说生病需要“myTable”,然后运行 myTable.func() 会得到错误,说“私人”没有定义。
我找到了两种方法来解决这个问题:
1)将“private”函数移到“func”之前 2)在“func”之前“Define”local private并将private的签名改为“function private”。
但我对他们为什么工作以及这是常见的方式有点困惑,很高兴帮助理解,ty:)
这是常见的方式
两者都工作,两者都是可取的。在您有两个相互调用的函数并且都需要在本地但不在表内的情况下,需要第二种方法。
您可以始终使用第二种样式并因此保持一致性,尽管它可能不像您需要转到代码中的不同位置来查看您的函数是否是本地的那样具有可读性。
但是,为了可读性和更短的代码,我将使用第一种方法,因此我不需要对本地函数进行单独的“声明”。
我对他们为什么工作有点困惑
原始代码不起作用的原因是局部变量作用域。从lua参考手册:
Lua 是一种词法作用域语言。局部变量的作用域从其声明后的第一条语句开始,一直持续到包含该声明的最内层块的最后一条非空语句。
因此,在您的原始代码中,变量private仅在定义它的行之后才被定义为函数。代码失败是因为您尝试在该行之前的代码中使用它。
这些方法之所以有效,是因为两者都将局部变量作用域从使用变量的代码上方开始。
您可能想在参考手册中阅读有关局部变量和范围的信息: