gpt4 book ai didi

lua - 为什么这个使用 self ":"的 Lua 函数不能被标记为 "local"而不得到 "' (' expected near ' :'"

转载 作者:行者123 更新时间:2023-12-04 16:48:22 32 4
gpt4 key购买 nike

为什么这个使用 self ":"的 Lua 函数不能被标记为 "local"而没有得到:

'(' expected near ':'



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

我注意到监听器功能需要本地化,否则我有时会在 Storyboard中遇到跨场景问题。这些可以标记为本地并且可以正常工作。
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 )

最佳答案

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

I note the listener functions need to be made local



你是什​​么意思?在 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,但我猜测事件处理程序不是由本地人的命名约定指定的。您需要将其注册为事件处理程序。例如,根据 this video Button 对象有一个 onEvent设置为该按钮的处理程序的字段。

关于lua - 为什么这个使用 self ":"的 Lua 函数不能被标记为 "local"而不得到 "' (' expected near ' :'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10594139/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com