パラメータとローカル変数はスタックに割り当てられ
an answer to a similar questionからの抜粋... (参照型でオブジェクトはヒープ上にあり、変数はそのオブジェクトを参照します)。スタックは、通常、アドレス空間の上端にあり、消費されると、アドレス空間の底に向かう(ゼロに向かう)。
また、プロセスにはヒープがあり、プロセスの最後に存在します。メモリを割り当てると、このヒープはアドレス空間の上端に向かって成長することができます。ご覧のとおり、ヒープがスタックに衝突する可能性があります(techtonicプレートのように!!!)。
スタックオーバーフローエラーは、スタック(サブルーチン)がオーバーフローした(スタックが何度も実行されたためにクラッシュした)ことを意味します。スタックオーバーフローエラーは、通常、不正な再帰呼び出し(AppleScriptの場合、不正なサブルーチン呼び出し)によって発生します。
サブルーチンが値を返す場合は、値がサブルーチン名でないことを確認してください。それ以外の場合、スタックはオーバーフローし、プログラムがクラッシュします(returnステートメントがtry
ブロック内にない場合)。これを変更してください:
return calculate_result(this_result)
...これまで
return this_result
...あなたはすごくいいはずです!
場合によっては、終了条件がある場合にのみ、サブルーチン名を返すこともできます。ユーザが無効な数値を入力した場合、例えば、サブルーチンはそれ自体を再実行できるが、場合のみ番号が無効であった(以下に示す):上記の場合
on get_input()
set this_number to null
try
set this_number to the text returned of (display dialog "Please enter a number:" default answer "") as number
on error --the user didn't enter a number and the program tried to coerce the result into a number and threw an error, so the program branches here
return get_input()
end try
return this_number
end get_input
を、終了条件は、いつユーザ発生します実際の数字が入力されます。終了条件がないため、通常、プログラムがスタックオーバーフローエラーをスローするとわかります。
この情報が役立ちますようお願いいたします。
いいえ...誰かが私をupvotedしてからそれを取り除いた:( – fireshadow52
+1バランス:) – Mahesh
+1すべての答え;彼らはすべて良いです:) – fireshadow52