プチコン3号 SmileBASIC コミュニティプレイ日記ビニールぶくろのそら KD.zip2017/01/28 22:58:56配列が引数に存在する関数Aと、配列を戻り値として返す関数Bが有ったとします。 関数Aを呼び出し、その中で引数として与えた配列に関数Bを代入すると、関数Aから戻ったとき、配列が関数A呼び出し前と変わっていないように見えます。 参照渡しでは無かったのでしょうか? 関数Bの結果をどのようにして返すかを考えないといけませんね……4そうだね 14返信プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿ビニールぶくろのそら KD.zip2017/1/28 23:07関数Bで配列を返して、そのときにポインタが変わったけど、呼び出し側にある配列のポインタは変わってない、ってことかな 今までの僕の認識が間違ってたっぽい0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿Hanzo rzsense2017/1/29 6:47関数Bで返している参照は、関数Bのローカル変数のものなので、関数Bの実行終了次第、その実体がなくなってしまうのでは・・・? 関数Aの引数として与える配列は、関数Aよりも上位のスコープのものでないといけないと思います。 0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿ビニールぶくろのそら KD.zip2017/1/29 8:32関数から戻る際にローカル変数の実体が消えるのはともかく、戻り値の実体までも消えるのは変だと思います。 僕が間違ってなければ、1コメで示した画像の例ではちゃんと上位のスコープだと思うんですけど……違いますかね?0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿ネタバレマギー M1912462017/1/29 9:19最初のプログラムの16行目で 配列を仮引数に代入してますけど このとき、元の引数の配列との参照が 切れるのではないかと思います。 0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿ネタバレマギー M1912462017/1/29 9:24上の私の表現が変でした。 参照先が一致しなくなる。です。0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿ネタバレマギー M1912462017/1/29 9:52連投すみません。 複数の配列を加工したいとかで 戻り値の形で返せないときは、 代入ではなくCOPY命令を使うというのは どうでしょう? 1そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿コータ[quota] W.D.WE2017/1/29 10:03プチコンの引き数で、配列の「参照渡し」と呼ばれるものは、細かい言い方をすると、配列の「参照を『値渡し』」になります。 したがって、ユーザ定義命令・関数の中では、 1)参照を書き換えるまでは、2つの参照が同じ実体を指しているため、参照を使用して書き換えた実体の値は、呼び出し元に反映されます。 2)参照を書き換えた後は、飛び出し元の参照と異なる実体を指しているため、参照を使用して書き換えた実体の値は、呼び出し元に反映されません。 2の場合、戻りに配列変数名を指定することで、呼び出し元に反映することが出来ます。(書き換え前の変更は失われます。)0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿ビニールぶくろのそら KD.zip2017/1/29 16:07個人的にはこの手のものは代入の方がやりやすい……とは言っても出来るだけ代入しない方向でも作ろうかな 参照の参照渡しは出来ないってことですね……文字列配列はどうなのか後で調べておこう0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿コータ[quota] W.D.WE2017/1/29 16:27引数と戻りの両方に配列変数を指定すれば、他の言語の「参照渡し」や「INOUT」と同じ事が出来ます。 例) DEF HOGE AIN[] OUT AOUT[] DIM A[20] VAR I COPY A,AOUT FOR I=LEN(AIN) TO LEN(A)-1:A[I]=I:NEXT AOUT=A END DIM X[10] VAR I FOR I=0 TO LEN(X)-1:X[I]=I:NEXT HOGE X OUT X FOR I=0 TO LEN(X)-1:? X[I]:NEXT3そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿コータ[quota] W.D.WE2017/1/29 19:59[訂正]例の4行目に間違いがありました。 誤:COPY A,AOUT 正:COPY A,AIN0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿MIKI ifconfig2017/1/30 0:18文字列も同じですよ def f(s) var t$=shift(s) return t$ end a$="abc": ? f(a$) これは "a" を表示し、a$ は "bc" になります。おなじロジックで def f(s) var t$=s[0] s=right$(s,len(s)-1) '文字列を新規に生成 return t$ end a$="abc": ? f(a$) これは "a" を返しますが、a$ は変化しません。 0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿ビニールぶくろのそら KD.zip2017/1/30 16:58ヘルプには「文字列変数」と表記してあるため、私がこれらを配列と呼ぶことは仕方がなく0そうだね プレイ済み2017/11/03 00:53:16に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿MIKI ifconfig2017/1/30 19:00オーノー 勘違いしてました!!0そうだね プレイ済み2017/11/03 00:53:16に取得