Lua 脚本中的函数之间共享变量

请查看以下 Lua 脚本。在改变状态之前,我通过调用 “getStateFlag()” 方法并将其分配给 “status” 变量来获取当前状态。方法 ChangeState1 或 ChangeState2 可以改变当前状态。因此,稍后在调用 ResetStatus 方法时,我可以通过分配 “status” 的存储值来重置旧状态。

但问题是,“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
点赞
用户5675002
用户5675002

首先,你应该区分两个不同的值——之前保存的状态和你使用getCurrentStatus()获取的当前状态。现在你在单个变量中混合了它们两个,每次进入Start()函数时都会初始化为0。当你没有询问当前状态(即标志不是1或2),你实际上是通过status=0分配破坏了之前保存的值。

2016-03-24 10:44:19
用户2858170
用户2858170

如果我正确理解了你的问题,你将会多次调用 Start()。 如果 flag 等于 1 或 2,你想要存储当前状态值,然后它将在 ChangeState1()ChangeState2() 中发生改变。 否则,你想要将 status 重置为上一次调用 Start() 的值。 但是目前每次你调用 Start() 时都会变成 0,而没有 flag 为 1 或 2。

所以基本上你只想在 status 还没有定义时将其初始化为 0。

你可以在 Start() 内部这样做:

status = status or 0

如果 status 是空值,它将默认为 0,否则它将保持不变。

或者你可以在函数外部初始化 status。

更清晰的解决方案是将备份状态与由 ChangeState1ChangeState2 更改的值分离出来。因此,你只会在需要备份或恢复时访问你的 backupStatus 变量。否则,你使用一些 currentStatus 变量。

2016-03-24 11:35:21
用户251199
用户251199

根据 Piglet 的回答中的评论,似乎这里的问题是你的运行环境在每次运行后都会删除或清除你的全局变量。你可以通过在 Start()的开始处打印 status 的值来验证这一点(假设你有某种输出方式)。如果它总是为 nil,那就是你每次都失去了全局状态的很好的指标。

如果你的环境是这种情况,你将不得不找到另一种方式来存储跨运行的状态。你可能可以访问特定于平台的文件系统或某些外部存储。

2016-03-26 01:02:10