伪开关状态机
Pseudoswitch Statemachine
我正在尝试使用 lua "pseudo"开关来设置状态机,但遇到了一些困难。
假设状态机应该检测几种颜色组合和return一种特定的其他颜色。 (只是举例说明原理)
总有一个 "old" 状态和一个 "new" 状态。
local state = {{},{}}
state["red"]["blue"] = function()
stop_a_timer()
return "purple"
end
state["blue"]["green"] = function()
call_a_function()
return "cyan"
end
state["green"]["red"] = function()
call_another_function()
return ("yellow")
end
function state_handler(old_state, new_state)
if not (state[old_state][new_state]()) then
return false
end
end
到目前为止,检查多个值非常简单,但我如何检查 "false" 值?
如何设置状态为:
(old_state == "green") and (new_state != "blue")
当然
state["green"][(not "blue")] = function () whatever end
无效。
您可以发明自己的符号。例如。 "!blue"
代表蓝色以外的任何东西:
state["green"]["!blue"] = function () whatever end
那么 state_handler
看起来像:
function state_handler(old_state, new_state)
for selector, fun in pairs(state[old_state]) do
if selector == new_state then
fun()
end
if selector:find "^!" and selector ~= ("!" .. new_state) then
fun()
end
end
end
此处仅 new_state
支持我们的符号。如果 old_state
也需要它,则必须调整此功能。
我正在尝试使用 lua "pseudo"开关来设置状态机,但遇到了一些困难。
假设状态机应该检测几种颜色组合和return一种特定的其他颜色。 (只是举例说明原理)
总有一个 "old" 状态和一个 "new" 状态。
local state = {{},{}}
state["red"]["blue"] = function()
stop_a_timer()
return "purple"
end
state["blue"]["green"] = function()
call_a_function()
return "cyan"
end
state["green"]["red"] = function()
call_another_function()
return ("yellow")
end
function state_handler(old_state, new_state)
if not (state[old_state][new_state]()) then
return false
end
end
到目前为止,检查多个值非常简单,但我如何检查 "false" 值?
如何设置状态为:
(old_state == "green") and (new_state != "blue")
当然
state["green"][(not "blue")] = function () whatever end
无效。
您可以发明自己的符号。例如。 "!blue"
代表蓝色以外的任何东西:
state["green"]["!blue"] = function () whatever end
那么 state_handler
看起来像:
function state_handler(old_state, new_state)
for selector, fun in pairs(state[old_state]) do
if selector == new_state then
fun()
end
if selector:find "^!" and selector ~= ("!" .. new_state) then
fun()
end
end
end
此处仅 new_state
支持我们的符号。如果 old_state
也需要它,则必须调整此功能。