我想在actionscript中使用协同程序来实现状态机。
我希望能够做类似以下的事情
function stateMachine():void
{
sendBytes(0xFFFF);
var receiveBytes:ByteArray = yield()
sendBytes(receiveBytes);
}
stateMachine.send( Socket.read() )
就像这个blog entry
一样答案 0 :(得分:2)
据我所知,Actionscript没有协同程序,continuation或任何可以提供相关行为的东西(在不推送堆栈框架的情况下调用函数)。你可以使用静态变量和switch
伪造它,但是这会破坏为协同程序使用协同程序的目的。此外,没有尾调用(据我所知,仍然只有一个proposal for ECMASCRIPT),伪造的协同程序不会像真正的协同程序一样使用常量堆栈空间。
关于你的示例代码,协同程序通常需要循环才有用。
答案 1 :(得分:1)
那么,这个怎么样?
function stateMachine(socket:Socket, target:YourReceiverClass):void
{
target.sendBytes(0xFFFF);
var receiveByte:int = socket.readByte();
target.sendBytes(receiveByte);
}
stateMachine( mySocket )