GoToコマンド
シナリオ中でGoToコマンドを実行すると、指定したラベルへと移動することができます。
コマンド名からしてその流れは一方通行のようですが、Returnコマンドで戻ってこれます。その後も何事も無かったかのように動作します。
もちろんExitで終了しても問題なし。
引数の無いCallコマンドとでも言うべきでしょうか。
しかしGoToコマンドはCallコマンドと違って、イベントラベルとして定義されているラベルへも飛ぶことが出来ます。
結局、GoToコマンドはイベントラベルへの移動特化、Callコマンドは通常ラベルへの移動特化として使い分けたほうが混乱も無くていいですね。
- 追記 Date:06/09/21
本来サブルーチンは「呼び出される→Returnコマンドが実行され、呼び出された場所へ戻る」というのが普通の動作だが、適当なラベルを用意し、GoToコマンドでそのラベルへ飛ぶことでどこへでも帰ることができる。
GoToコマンドによる帰還のメリットとして、サブルーチン内で作成されたローカル変数が削除されない、というものがある。
これは確認済みで、ローカル変数はExitコマンド、Returnコマンドの実行と同時に削除されていると思われる。
これは確認済みで、ローカル変数はExitコマンド、Returnコマンドの実行と同時に削除されていると思われる。
ただし、SRCでは再帰処理が可能なので、Localコマンド実行直後のExitまたはReturnで削除されるわけではない。
※注意
GoToコマンドはプログラムの流れがわかりにくくなるし、ともすればエラーの発生に直結する。
素人にはオススメできない。
GoToコマンドはプログラムの流れがわかりにくくなるし、ともすればエラーの発生に直結する。
素人にはオススメできない。
この方法はReturnコマンドのように戻っているのではなく、単にGotoコマンドで移動しただけ。 サブルーチン自体は終了していないので、Gotoコマンドで移動した先でReturnコマンドを実行すれば、サブルーチンを呼び出した位置まで戻る。 下記サンプルのような形で多用すると50階層を越えるサブルーチンの呼び出し制限に引っかかるので、この方法を使うのはやめた方がいい。
- サンプル
スタート: local test1 = "テスト1" call テストルーチン スタート2: talk test2:$(test2) end Exit テストルーチン: talk test1:$(test1) end local test2 = "テスト2" GoTo "スタート2" ターン 1 味方: talk test2:$(test2) end Exit