if文の後の合流について(質問掲示板)
投稿:
fragile
投稿:2012/05/02 19:07:02(最新:2012/05/03 15:51:03)
fragile
投稿:2012/05/02 19:07:02(最新:2012/05/03 15:51:03)
今回の質問はifによる分岐です。
下のスクリプトを実行するとCは表示されるのですが、Dが表示されません。
流れとしては
"C"-->case文でもよさそうな所(※部)で分岐-->return-->合流-->"D"
と想定しているのですが、どこが違うのでしょうか?
ツイート
下のスクリプトを実行するとCは表示されるのですが、Dが表示されません。
流れとしては
"C"-->case文でもよさそうな所(※部)で分岐-->return-->合流-->"D"
と想定しているのですが、どこが違うのでしょうか?
def count()
if getVariable("q") > 0
speak("C")#ココは表示される
#※※※ここから※※※
if (getVariable("q") == 1) || (getVariable("q") == 17)
return 1
elsif (getVariable("q") == 2) || (getVariable("q") == 16)
return 2
elsif (getVariable("q") == 3) || (getVariable("q") == 15)
return 4
elsif (getVariable("q") == 4) || (getVariable("q") == 14)
return 8
else
return 16
end
#※※※ここまで※※※
setVariable("q", getVariable("q") + 1)
speak("D")#ココは表示されない
else
return 0
end
if getVariable("q") == 18
setVariable("q", 0)
end
end
po = true
setVariable("q", 1)
txt = createText(10, 10, 780, 60)
i = 0
while po
i = i + 1
speak("A")
setText(txt, "count() = ", count(), " , q = ", getVariable("q"), " , ", i)
waitTime(30)
speak("B")
endコメントする
コメントするには、ログインする必要があります。
returnを1回のみしか
記述できないため
8行目でエラーとなり
count関数が正常に実行されないまま
中断した状態でsetTextに戻ってきています。
count関数内で一度
ローカル変数に値を代入し
関数の最後でローカル変数の値を
returnにセットするようにしましょう。
デバックでエラーが出なかったので てっきり...
回答ありがとうございました。
また、defの中でも複数回記述することができます。
質問文の処理の流れについては
"C"-->case文でもよさそうな所(※部)で分岐-->return-->関数を抜ける
という形になります。
if文の分岐内容を判断中に
return文を見つけて、
def文を抜けてしまっている
ということでしょうか?
> return文を見つけて、
> def文を抜けてしまっている
> ということでしょうか?
そうです。
returnより後に何か書いてあっても、通過してない部分の処理は実行されるワケないですよね