Lua中如何调用函数内部的嵌套函数?代码报错求助
解决Lua调用内部函数的索引nil错误
首先,咱们先搞清楚你为啥会遇到15: attempt to index a nil value这个错误:你的test()函数执行完之后没有返回任何值(Lua中函数默认返回nil),所以当你写test().notawesome()的时候,相当于在尝试对nil做索引操作,这肯定会报错呀!
要调用test内部的notawesome函数,核心是得把内部的函数暴露到外部作用域里,最常用的方式是让test返回一个包含这些内部函数的表,具体实现如下:
function test() -- 用local定义内部函数,避免污染全局作用域 local function awesome() print("im awesome!") end local function notawesome() print("im not awesome.") end local function notevenawesome() print("im not even awesome...") end -- 返回一个表,把需要暴露的函数作为表的字段 return { awesome = awesome, notawesome = notawesome, notevenawesome = notevenawesome } end -- 现在就能正确调用内部的notawesome函数了 test().notawesome()
如果你只需要暴露某几个特定的函数,也可以在返回的表里只包含这些函数,比如只返回notawesome:
return { notawesome = notawesome }
另外补充一点:Lua中函数内部定义的函数默认是局部作用域的(除非你显式声明为全局),所以外部无法直接访问,必须通过返回值、全局变量或者其他闭包方式把它们暴露出来,上面的返回表是最清晰、最推荐的做法。
内容的提问来源于stack exchange,提问作者crazicrafter1
相关产品推荐
相关产品推荐

