デフォルトのローカルとローカルの明示的な宣言こんにちは、関数のローカル スコープに関してリスクを制限する最善の方法を理解しようとしています。 私の理解では、関数の実行内から Here スコープを汚染する可能性を制限するためのオプションは、ローカル変数を宣言するか、デフォルト ローカルを使用することです。 ただし、これらにはそれぞれいくつかの問題があります。
デフォルトのローカル:
- ローカルで定義されていない名前は、おそらくここにフォールバックするため、値の参照はコンテキストに依存する可能性があります (Names Default To Here がオフの場合) グローバルの次に現在のテーブル。 ドキュメントに記載されているように、これは、値がコンテキストに依存するため、動作が予測しにくいことを意味する可能性があります。
明示的な宣言:
- ローカル名で宣言されていない場合、名前は宣言されるまでこのフォールバック動作を使用するため、値の参照はコンテキストに依存する場合があります。
- 割り当てが誤って Here スコープに漏れる可能性があります。 つまり、ローカルであることを意図した名前がローカル名の宣言から省略されている場合、周囲の Here スコープが汚染されます。
- 一般に、この外側の範囲の汚染を追跡するのは困難です。
- たとえば、"i" を反復子として使用する For で関数を呼び出し、その関数にも i を使用する For があり、それをローカルとして宣言できない場合、これは外側の For ループに影響します。 確かに、これは明らかなプログラマーのエラーですが、作成するのは簡単で、デバッグするのは困難です。
私の考えでは、理想的なオプションは、「Strict Local」のようなものを宣言できることです。これは、ローカルおよび周囲のスコープが修飾された名前でのみアクセスできるため、(値を割り当てるときと値を参照するときの両方で) 常に非修飾名を扱います。 これにより、周囲のスコープを汚染する危険を冒したり、それらのスコープに依存しているときに宣言を強制したりするリスクを回避できるため、周囲のスコープからのローカル汚染を制限できます。
スクリプティング