コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
Na ◆QoELVrBXBQCI
2020/2/16 17:26
情報交換
READしても未定義変数は未定義扱い?(3号)
DEF HOGE OUT A$
READ A$
A$[0]="A" 'A$の最初の文字を"A"にする
END

(RESTOREはしてあるものとして)これを呼び出すとA$[0]に代入する操作でType Mismatchになります。
A$[0]の中身を見るだけだとエラーになりません。

READの前にA$=""を入れておくと解決します。

コメント

アバター
こういち 2020/2/16 20:37 ◆ou0jbJnEJ0Kb
READは代入とは違うってこと?
怖っ…

Type Mismatch
ってことは定数扱いかな?
よく分からんけど怖い。
アバター
さすらいの名無し 2020/2/16 21:04 ◆LWMA5UzCJb3e
A$[0]を配列として認識してしまっていて、DIMされてないから起こるエラーかと
アバター
Na 2020/2/16 21:31 ◆QoELVrBXBQCI
>さすらいの名無しさん
DEF HOGE OUT A$
A$="HOGE"
A$[0]="A" 'A$の最初の文字を"A"にする
END
これだとエラーにならず、A$には"AOGE"が返るんですよ
アバター
Na 2020/2/16 21:58 ◆QoELVrBXBQCI
READしたA$(中身は"HOGE")に対していろいろ試してみました
A$[0]="A" → Type Mismatch
A$=SUBST$(A$,0,1,"A") → AOGE(正常)
A$="A"+RIGHT$(A$,3) → AOGE(正常)
INC A$,"A" → HOGEA(正常)
PUSH A$,"A" → HOGE(無視された?)
B$=POP(A$) → HOG(正常)
UNSHIFT A$,"A" → HOGE(無視された?)
B$=SHIFT(A$) → OGE(正常)

VAR A$ はDuplicate Variableなので、未定義ではないみたいです
定数扱いって...あ、DATE$[0]="A"と同じってことですか
でもDATE$にはINCできなかったような...
アバター
ツララ 2020/2/16 23:22 ◆ArUdBYOYME1V
こういちさんが指摘していますけど
文字列は配列と同じで参照型なのでREADは代入扱いじゃないのが原因?
事前に = で代入操作をすることで、暗黙の変数定義が行われてメモリが確保されるので
Type Mismatchにならないとか。

同じ参照系命令や文字列操作系の命令だとエラーにならないこともそれで説明が付きそう。
アバター
こういち 2020/2/17 13:48 ◆ou0jbJnEJ0Kb
定数扱いは
DEF SUB A
 A[0]="A"
END
SUB "Kitty on your lap."
みたいな。(確かType Mismatchが出たはず)DATE$もある種の定数なのでそれも真理。
INC,POP(),SHIFT()が正常にちゃんと動く辺り定数とは違うらしい。ちなみにSUBST()とRIGHT()は新たに文字列が生成されてそれが代入されてるだけなので定数でも大丈夫。

一番怖いのは、アドレスや型が確定してないA$にDATAの文字列が直接コピーされてるパターン。システムの重要な部分が書き換わる可能性。
検証結果を見る限りその可能性はあるかも。
アバター
Na 2020/2/17 19:37 ◆QoELVrBXBQCI
なるほど...
確かにA$のアドレスが決まってないのにコピーされてたら危険ですね。

でも、
READ A$
B$=A$
READ A$
?A$,B$
でA$とB$は違うものが表示されるので、READは参照型ではなく、新たに文字列が生成されていると思います。
アバター
Na 2020/2/17 23:00 ◆QoELVrBXBQCI
たぶん関係ないと思いますが最近(このDEF内READをmkIIat3号に入れた頃から)スリープから復帰できず3DSが落ちることが(2回ほど)ありました。
(今のmkIIat3号ver3.2ではREADの前に代入するようにしてます)

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -