プレイ日記
しんしん manashi3
この仕様はあり?引数を戻り値にそのまま返したかったのに、必ず返りの変数に何か代入しないとエラーって… (画像はヘルプに載ってたプログラム)
4そうだね
プレイ済み
返信[1]
親投稿
そりゃそうだという感じも… DEFのOUT以降に続く変数の初期値はゼロではなく、jsでいうUndefinedのような不思議な値なのかなぁ、っ思ってます。
2そうだね
プレイ済み
返信[2]
親投稿
「引数を戻り値にそのまま返したかった」 って何だろう… OP=AとかOP=Bじゃなくて??
0そうだね
プレイ済み
返信[3]
親投稿
逆に言うとOPになにも入れてないのに何が返ってくると思ったのだろう…? 引数とOUTの変数に関連性はないからね。
2そうだね
プレイ済み
返信[4]
親投稿
Godot orz_127
「有り」だと。 OUT で返す場合は、そのコマンドを抜けるとき(途中でRETURNする場合もふくめ)全ての返却用変数に値が代入されていないとエラーとなる仕様だった筈。 なので忘れないように、コマンド定義の最初でとりあえずの初期値を代入するのが吉です。 最近の言語は何も代入していない変数は0とかNULLで初期化されている場合が多いですが、初期化されず、値が不定となる言語も多いです。 変数を定義したらまず初期値を設定する習慣をつけておくとほとんどの言語に通用するので良いですよ。 Prologの場合、バインドしてしまうのでだめですがw
2そうだね
プレイ済み
返信[5]
親投稿
しんしん manashi3
なるほど、これだからnullはめんd(ry A=Aで回避できない理由がよく分かりました。 もともと DEF HOGE A,B OUT A,B ~ みたいな感じでプログラムを組もうかな~と思っていました。
2そうだね
プレイ済み
返信[6]
親投稿
Godot orz_127
やはり、そっちの話でしたか^^; その話の可能性も考えましたが。 入力用引数の変数と出力用(OUTの右側)の変数は別にする必要が有ります。 それをしたいなら DEF HOGE IA,IB OUT OA,OB OA=IA:OB=IB ~ END とします。
1そうだね
プレイ済み
返信[7]
親投稿
しんしん manashi3
あ、もしかして、 A=A*1 にすれば回避可能?
0そうだね
プレイ済み
返信[8]
親投稿
なわけないと思うけど…
0そうだね
プレイ済み
返信[9]
親投稿
別名にして代入するだけなので、特に困ることはないと思うんだけどなぁ…
2そうだね
プレイ済み
返信[10]
親投稿
HOGE "A","B" みたいに渡してVAR()関数で書き換えるとか…
1そうだね
プレイ済み
返信[11]
親投稿
しんしん manashi3
変数一つだけ使ってエラー回避のこと考えてたらキリがなくなってきた。 (いちいちこだわるのが悪い) 諦めて変数もう一つ作ります・・・
1そうだね
プレイ済み
返信[12]
親投稿
1画面プログラムなどの特殊な場合を除いて変数は減らせばいいというわけじゃなくてわかりやすくする事が大事じゃないかと思います。 まあ引数の変数を変える必要がない場合もあるケース(座標補正とか?)は、そのままOUTに入ってくれればと思う事もあるのかな、とは思いますが…。 でも大抵はOUTに適切な変数名をつけた方が引数をそのまま返すよりはわかりやすくなると思いますね。
1そうだね
プレイ済み