function scene:createScene(event) ... end
是语法糖:
scene.createScene = function(self, event) ... end
这是语法糖:
scene["createScene"] = function(self, event) ... end
你想做:
local scene["createScene"] = function(self, event) ... end
这没有任何意义。
另一种说法:local是变量的限定符,使其成为局部变量而不是全局变量。您将获得什么变量local function 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字段,该字段设置为该按钮的处理程序。