E2094 ローカル手続き/関数 '%s' を手続き変数に代入しました (Delphi)
エラーと警告のメッセージ(Delphi) への移動
このエラーメッセージはローカル手続きを手続き変数に代入しようとした場合か,ローカル手続きを手続きのパラメータとして渡そうとした場合に表示されます。
そのような操作は,外側の手続きがアクティブでなくてもローカル手続きを呼び出せることになるので違法です。ローカル手続きが外側の手続きの変数にアクセスしようとするとプログラムがクラッシュします。
program Produce; var P: Procedure; procedure Outer; procedure Local; begin Writeln('Local is executing'); end; begin P := Local; (*<-- ここでエラーメッセージ*) end; begin Outer; P; end.
{ このコードはローカル手続きを手続き型変数へ代入しようとする。これは実行時に安全でないので違法である }
program Solve; var P: Procedure; procedure NonLocal; begin Writeln('NonLocal is executing'); end; procedure Outer; begin P := NonLocal; end; begin Outer; P; end.
{ ローカル手続きを外側の手続きから外へ出せば解決する }