在Lua脚本中跨函数共享变量
请看下面的Lua脚本 其思想是,在更改状态之前,我通过调用“getStateFlag()”并分配给“status”变量来获取当前状态。方法ChangeState1或ChangeState2可以更改当前状态。所以稍后调用ResetStatus方法时,我可以通过分配存储的“status”值来重置为旧状态 但问题是,这个“status”变量总是设置为0在Lua脚本中跨函数共享变量,lua,Lua,请看下面的Lua脚本 其思想是,在更改状态之前,我通过调用“getStateFlag()”并分配给“status”变量来获取当前状态。方法ChangeState1或ChangeState2可以更改当前状态。所以稍后调用ResetStatus方法时,我可以通过分配存储的“status”值来重置为旧状态 但问题是,这个“status”变量总是设置为0 function Start() status = 0 local flag = getStateFlag() if(flag
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
但问题是,此“状态”变量始终设置为0。首先,您应该分离两个不同的值—以前保存的状态和使用getCurrentStatus()获得的当前状态。现在,您将它们混合在一个变量中,每次输入Start()函数时,该变量都会被初始化为0。当您不询问当前状态(即标志不是1或2)时,您实际上使用
status=0
赋值销毁了以前保存的值。因此,如果我正确理解了您的问题,您将多次调用Start()
。
如果flag
等于1或2,您希望存储当前状态值,然后它将在ChangeState1()或ChangeState2()中更改
否则,您希望将状态
重置为上次调用Start()
但当前,每次调用Start()
时,如果标志不为1或2,则它将为0
因此,基本上,您只希望在尚未定义状态时使用0初始化状态
在Start()中可以执行以下操作:
因此,如果status
为nil,它将默认为0,否则它将保持不变
或者您只需在函数外部初始化状态
更干净的解决方案是将备份状态与由ChangeState1或ChangeState2更改的值分开。
因此,只有在需要备份或恢复时,才能访问backupStatus变量。否则,您将使用一些currentStatus变量。根据Pieget回答中的注释,这里的问题似乎是运行时环境在每次运行之间删除或清除全局变量。您可以通过在Start()开头打印status的值来验证这一点(假设您有某种方法获得输出)。如果它总是零,这是一个相当好的指标,你每次都在失去全局状态
如果在您的环境中是这种情况,您必须找到另一种方法来跨运行存储状态。您可以访问特定于平台的文件系统或某些外部存储。单击按钮即可运行此脚本。所以,每次这个脚本运行时,它都会分配status=0,正如我这样声明的。是否有其他方法保持此值不变?每次单击按钮时,此完整脚本都将运行。因此,如果状态有值,则在下次执行时不应将其分配给0。。。有什么办法吗?@Roe是的,照我说的做。我试过status=status或0。。。但是status的值始终为0。我认为每次运行此脚本时,status的值都在初始化。是否删除了status=0的行?当然,当您的全局作用域丢失时,status的值也将丢失。是的,我删除了status=0,现在我的status=status或0。那么,当同一个脚本再次运行时,是否有一种方法来保持变量的值?请考虑编辑您的问题来描述您正在运行的环境(它听起来像某种嵌入式处理器?)。如果其他用户对此有经验,他们可能会有想法。
status = status or 0