投稿
EDIT1に@LBLと書いて画像のプログラムを実行すると、DEF-END内でスロット指定がない場合だけ、FALSEになります。これは、仕様でしょうか。
2そうだね
プレイ済み
返信[1]
親投稿
DEF-END内からGOSUBできる場合が見つかりました。ただし、変数のスコープが正常に機能するかわからないので、使うのは危険かも…
0そうだね
プレイ済み
返信[2]
親投稿
l-oxygen_k KOKO929292
そうですね。仕様です! DEF~ENDステートメント?が終わったら、ステートメント内で使ったラベルや変数などが消滅するのです。
0そうだね
プレイ済み
返信[3]
親投稿
言葉足らずで、申し訳ありません。 わたしは、もしかしたら、GOTOやGOSUBを利用方法を規制する手段の1つとしてこのようになっているのかもしれないと考えて「仕様でしょうか。)という質問をしました。
0そうだね
プレイ済み
返信[4]
親投稿
もやしもどき Pseudomoyashi
こんな感じのコードで確認してみた限りでは、ユーザ関数から呼び出されたものであってもサブルーチン内からはグローバル変数にアクセスし、またサブルーチン呼び出しでローカル変数が破壊されるということも無さそうです。 ちなみに更新データを削除した前バージョンでも、この方法を使えば関数外のラベルにアクセスできていたみたいですね。 (確認しようと「追加コンテンツ」を削除するつもりが、間違って「追加データ」を削除してしまったのは内緒)
1そうだね
プレイ済み
返信[5]
親投稿
調査ありがとうございます。 ということは、DEFのヘルプに対する私の理解が間違っていると言うことかもしれませんね。
0そうだね
プレイ済み
返信[6]
親投稿
もやしもどき Pseudomoyashi
どうやらラベル文字列を使ったラベル参照(RESTOREを除く)では スロット番号を省略: グローバルからの場合、実行中スロットの(グローバルな)ラベルを検索 ユーザ関数からだとその関数のスコープ内のみを検索 スロット番号を指定: 呼び出し元に関わらず指定スロットのグローバルにあるラベルを検索 という挙動になっているみたいですが、ただ本来はDEFのヘルプに書いてある内容が想定している挙動であって、 (スロット番号指定により)外のラベルにジャンプできるというのはイレギュラーな挙動なんじゃないかなという気はします。実際のところは分からないですけど。
0そうだね
プレイ済み
返信[7]
親投稿
最初は、BGMSETDの引数チェックを入れようとして、「RESTOREは、問題ないのに、なぜCHKLABELで失敗するのだろう。」ということから、調査を始めたのですが、調べていくうちに、GOSUBまで、手を伸ばしてますますわからなくなりました。現実には、DEF-ENDの方が好みなので、使うことは余りないとは思いながら、気になって仕方が無くなり質問してしまいました。
0そうだね
プレイ済み
返信[8]
親投稿
もやしもどきさんへ まげさんが、DEF-END内からのGOSUBの問題点を明らかにしてくださいました。
0そうだね
プレイ済み
返信[9]
親投稿
もやしもどき Pseudomoyashi
わざわざありがとうございます。 同じRETURNという命令が、サブルーチンからの復帰にもユーザ関数の終了にも用いられるせいで、ちょっと変なことになっちゃうんですね。
1そうだね
プレイ済み