层次状态机返回超状态的定义
先容我啰嗦几句,层次状态机的一个很重要特点是,它的所有状态都是一个函数,它的状态函数原形就是上图中
定义的那样,意思就是,这个状态函数的返回值也是一个状态函数并且和它自身是一样的,这样就让状态有了层次
通俗地说就是A状态下无法处理的消息就让它的超状态来处理,它的超状态也无法处理的就让它的超状态的超状态
来处理,它的超状态的超状态无法处理的,就让它的超状态的超状态的超状态来处理,直到祖宗的祖宗的祖宗的祖宗。
一个状态返回超状态这个动作在C语言中就是return 超状态函数(事件参数), 其实就是调用的意思,只不过这个调用是
递归的,它可能会递归到祖宗18代,而且是尾递归。
红框中的这句话,也许我们不用太纠结,但咱搞技术的就必须去纠结,纠结的结果当然是认同了作者的说法。
我尝试不用类型定义直接实现,后来发现如果函数的返回值是一个与其本身具体相同类型函数,在C语言上只能通过类型定义来实现。
来一个不用类型定义,直接定义一个函数,它的返回值是一个函数,但返回的这个函数类型与其本身不一样的例子
void returnFunc(int *p)
{
printf("returnFunc output:%d\n", *p);
}
void (*test(int *p))(int *p)
{
printf("test output:%d\n", *p);
return returnFunc;
}
int main(int argc, char *argv[])
{
int a = 68;
test(&a)(&a);
return 0;
}
每种语言都有它的特性,并不一定要是编程语言,哪怕是动物之间的交流语言。
有没有过这种感觉,当你用家乡话表达一个事物或者事件时很困难,然后改用普通话或者英语却很顺畅,反之亦然。
在如此浮躁的社会下,真正静下心思来研究学问的人不多了,谁让我们还处于追求金钱、利益的阶段呢,啥时候追求精神超度啊。