假设我有以下状态:
State
{
name: "red_state"
when: color === "red"
},
State
{
name: "blue_state"
when: color === "blue"
},
State
{
name: "square_state"
when: shape === "square"
},
State
{
name: "circle_state"
when: shape === "circle"
},
State
{
name: "blue_circle_state"
when: color === "blue" && shape === "circle"
}
"blue_circle_state"从未被触发,这是为什么?有没有更好的办法为一个国家提供若干条件?
在一个when
中对一个State
有多个条件并没有错,这里的问题是让blue_state
、circle_state
和blue_circle_state
同时评估为 true。关于一国财产的文件说:
如果组中的多个状态具有同时计算结果为 true 的 when 子句,则将应用第一个匹配状态。
因此,当颜色为蓝色且形状为圆形时,这里只有blue_state
处于活动状态。
在您的情况下,在开始时移动更具体的blue_circle_state
将解决您的问题,但您仍然不能同时激活多个状态。
如果你想要一个更高级的状态机,你可以看看声明性状态机框架。