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