在Lua脚本中跨函数共享变量

时间:2016-03-24 09:56:48

标签: lua

请查看下面的Lua脚本。

想法是,在更改状态之前,通过调用" getStateFlag()"来获取当前状态。并分配到" status"变量。方法ChangeState1或ChangeState2可以更改当前状态。因此,稍后在调用ResetStatus方法时,我可以通过分配" status"的存储值来重置为旧状态。

但问题是,这个"状态"变量总是设置为0。

function Start()
    status = 0
    local flag = getStateFlag()
    if(flag == 1) then
       status = getCurrentStatus()
       ChangeState1()
    else if(flag == 2) then
       status = getCurrentStatus()
       ChangeState2()
    else
       ResetStatus(status) 
    end
end

function ChangeStatus1()
     device::set_value(1)
end

function ChangeStatus1()
     device::set_value(2)
end

function ResetStatus(status)
     device::set_value(status)
end

3 个答案:

答案 0 :(得分:1)

因此,如果我正确理解您的问题,您将多次致电Start()。 如果flag等于1或2,您希望存储当前状态值,然后在ChangeState1()ChangeState2()内更改 否则,您希望将status重置为上次调用Start()时的值 但是目前每次拨打Start()时{0}都没有flag为1或2,它将为0。

所以基本上你只想在status尚未定义时将其初始化为0. {/ p>

你在Start()中可以做的是:

status = status or 0

因此,如果status为零,则默认为0,否则保持不变。

或者您只是初始化函数之外的状态。

更简洁的解决方案是将备份状态与ChangeState1或ChangeState2更改的值分开。 因此,只有在要备份或想要还原它时才能访问backupStatus变量。否则你使用一些currentStatus变量。

答案 1 :(得分:0)

  

但问题是,这个“状态”变量总是设置为0.

首先,您应该分隔两个不同的值 - 先前保存的状态,以及getCurrentStatus()获得的当前状态。现在你将它们混合在单个变量中,每次进入Start()函数时都会初始化为0。如果您没有询问当前状态(即标志不是1或2),您实际上会通过status=0分配销毁以前保存的值。

答案 2 :(得分:0)

根据Piglet的回答中的评论,听起来这里的问题是您的运行时环境是在每次运行之间删除或清除全局变量。你可以通过在Start()的开头打印status的值来验证(假设你有办法获得输出)。如果它总是为零,那么这是一个非常好的指标,你每次都会失去全球状态。

如果在您的环境中就是这种情况,那么您必须找到另一种在运行中存储状态的方法。您可以访问文件系统或特定于该平台的某些外部存储。