我有nil变量的问题。它经常发生在我身上,因为我是lua的初学者。这是我收到的错误消息:
attempt to index global 'popUp_circle' (a nil value) stack traceback
我正在使用的代码:
function popUp(header, text)
local popUp_overlay = display.newImageRect("images/transparent_black.png", 480, 320)
popUp_overlay.x = halfW
popUp_overlay.y = halfH
popUp_overlay.alpha = 0.3
group:insert(popUp_overlay)
local popUp_background = display.newImageRect("images/popUp.png", 300, 150)
popUp_background.x = halfW
popUp_background.y = halfH
group:insert(popUp_background)
local popUp_header = display.newText(header,0,0,native.systemFont,14)
popUp_header.x = halfW+5
popUp_header.y = halfH-47
group:insert(popUp_header)
local popUp_text = display.newText(text,0,0,native.systemFont,14)
popUp_text.x = halfW
popUp_text.y = halfH+10
group:insert(popUp_text)
local popUp_circle = display.newCircle( halfW+135, halfH-55, 8 )
popUp_circle:setFillColor( 0 )
popUp_circle.alpha = 0.3
group:insert(popUp_circle)
timer.performWithDelay( 100, timerCircle )
end
function onClickCircle()
end
function timerCircle()
popUp_circle:addEventListener( "tap", onClickCircle )
end
答案 0 :(得分:4)
popUp_circle
被定义为popUp
中的本地人,因此在timerCircle
中未见。
答案 1 :(得分:2)
如果您要在另一个函数中使用popUp_circle
,该函数必须现在可以访问。实际上,它是popUp
函数的本地。从该函数返回popUp_circle
并将其传递给timerCircle
:
function popUp(header, text)
...
return popUp_circle
end
puc = popUp(header, text)
timerCircle(puc)
或者,将其设置为模块的本地:
local popUp_circle
function popUp(header, text)
...
popUp_circle = display.newCircle(...
...
end
在这种情况下,没有必要将它返回或传递给timerCircle
,这很诱人(代码较少),但是一旦你的模块变大,因为你为它增加了大量的逻辑;)很多模块globals将使调试更复杂。也就是说,如果将模块细分为main.lua
所需的多个模块,那么每个文件都会成为各种对象,并且这些模块全局变量可以被视为对象的数据成员。
如果你没有在模块级别声明popUp_circle
local,那么它将是一个真正的全局,“污染”全局命名空间,绝对是要避免的。