smg FAQ

Q. 複数のトークンを同時に投函するとどうなるんですか?


A.

smgでは、n回目のstep()を実行してからn+1回目のstep()を実行するまでの間に投函してよいトークンは、最大で一つです。二つ以上投函した場合、debugモードではassertに失敗します。releaseモードでは上書きします。


smgの出力する機械は、トークンのキューイングなどを行いません。原理主義的にはキューイングは必要ないはずであり(たぶん)、ユーザが意図してキューイングしようとしたのか単にバッティングしたのか区別がつかないので、フェイルセーフで禁止しています。


ただし、投函+step()の結果としておこるアクション内での次のトークンの投函は特に問題ありませんので、

トークン→step()→アクション→アクション内でトークン→アクションから帰る→step()→アクション→……

といった連鎖は可能です。トークンをポストしたときにアクションが直ちに実行されるわけではないので、この場合でも実行スタックが深くなり続けることはありません。


トークンのキューイングを行いたくなった場合、おそらくそれは何かの間違いなので、自動イベントや連鎖で代用できないかどうか考えてみてください。