为什么可以';t此Lua函数使用一个self";:&引用;标记为“;“本地”;而不是';(&"x27;预计接近&"x27;:&"x27";

为什么可以';t此Lua函数使用一个self";:&引用;标记为“;“本地”;而不是';(&"x27;预计接近&"x27;:&"x27";,lua,coronasdk,Lua,Coronasdk,为什么使用self“:”的Lua函数不能标记为“local”,而不获取: “(“预计在附近”:” 也就是说,在下面的代码中,一切正常。但是为什么我不能将“scene:createScene”函数设置为本地(因为我在尝试时遇到了上述错误) 我注意到监听器函数需要本地化,否则我在故事板中有时会遇到跨场景的问题。这些可以标记为本地,工作正常 SceneBase = {} function SceneBase:new() local scene = Storyboard.newScene()

为什么使用self“:”的Lua函数不能标记为“local”,而不获取:

“(“预计在附近”:”

也就是说,在下面的代码中,一切正常。但是为什么我不能将“scene:createScene”函数设置为本地(因为我在尝试时遇到了上述错误)

我注意到监听器函数需要本地化,否则我在故事板中有时会遇到跨场景的问题。这些可以标记为本地,工作正常

SceneBase = {}
function SceneBase:new()
  local scene = Storyboard.newScene()

  local function returnButtonTouch_Listener (event)
    -- code here
  end

  function scene:createScene( event )   -- WHY CAN'T THIS BE LOCAL???
    -- code here
  end

  return scene
end
return SceneBase
这就是为什么函数行不能读取:

  local function scene:createScene( event )
语法是否适用于:

scene.createScene = function(self, event) ... end
scene["createScene"] = function(self, event) ... end
这是一种语法:

scene.createScene = function(self, event) ... end
scene["createScene"] = function(self, event) ... end
您要执行以下操作:

local scene["createScene"] = function(self, event) ... end
这毫无意义


另一种说法是:
local
是一个变量的限定符,该变量使其成为局部变量而不是全局变量。您将使用
local函数scene:createScene(event)
限定哪个变量

createScene
不是一个变量,它是表
scene
中的一个键


事实上,这有点误导。当你说:

foo = 10
没有限定,
foo
变为全局,也就是说它存储在全局状态,如下所示:

_G.foo = 10;
这当然意味着与此相同:

_G["foo"] = 10;
当您使用关键字
local
时,它不会存储在表中,而是最终存储在VM寄存器中,这不仅更快,而且范围更严格

当您编写以下任一项时:

function foo.bar() end
function foo:bar() end
您在表(
foo
)中显式存储函数值。这些语句分别与以下语句完全等效:

foo["bar"] = function() end
foo["bar"] = function(self) end

我注意到侦听器函数需要本地化

你这么说是什么意思?在Lua中,函数就是函数就是函数。它只是另一个值,比如字符串或数字。它是存储在全局、表、本地还是根本不存储都无关紧要

local foo = print
_G["zap"] = foo
doh = zap
t = { zip = doh }
t.zip("Hello, World") -- Hello, World

assert(print == foo
    and zap == foo
    and zap == doh
    and t.zip == doh)
这里我们传递
print
函数。它都是相同的函数,只要我们有一个引用,我们就可以调用它


我不知道Corona,但我猜事件处理程序不是通过局部变量的命名约定指定的。您需要将其注册为事件处理程序。例如,根据Button对象有一个
onEvent
字段,该字段设置为该按钮的处理程序。

非常感谢您的响应,现在有意义了。re l监听器,我有一些问题,我们从基类“继承”了多个文件,我想,由于监听器是全局的,所以这里出了问题。当我将它们标记为本地时,我就消失了。这是一个非常清楚的解释。但是,还有什么方法可以使用“本地”吗想要引用self的函数?比如java私有函数或C本地函数?有更好的方法吗?PIL第16章不是很清楚