lua类中的全局变量的生命周期(即在类外的local变量)

在Lua中,require模块后,package.loaded会保存模块状态。若模块已加载,require将返回之前保存的值,导致类外的局部全局变量拥有与类相同的生命周期,保存运算结果。为确保每次require得到初始值,可以通过删除package.loaded中的对应条目实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在开发项目的过程中,界面需要设置坐标,为了便于管理图片的起始坐标我写到了类的方法外面,然后根据需要在类方法中对startX、posY、betweenX、betweenY等进行运算修改。
local className = class("className" , function()
    return display.newColorLayer(cc.c4b(0,0,0,122))
    end)

_className = nil

local startX = 320
local posY = 490
local betweenX = 240
local betweenY = 40
    原来我的理解是通过下面的方法每次添加删除之后,startX、posY、betweenX、betweenY等的值会被重新赋值,但是在实际运行中发现,require过一次之后,startX、posY、betweenX、betweenY这些值不会再被重新赋值,而是上一次调用时运算过后的值,这个使我的界面在显示的时候出现了bug。( ps:造成这个原因主要是我对require的原理和lua的闭包不熟悉难过)
function className.popOut()
    className.popIn()
    _className = className.new()
    local scene = display.getRunningScene()
    scene:addChild(_className ,100000)
e
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值