默認本地與本地人的顯式聲明您好,我正在嘗試了解如何最好地限制我在函數本地範圍方面的風險。 根據我的理解,我的選擇是限制從函數執行中污染 Here 範圍的可能性,要么聲明我的局部變量,要么使用 Default Local。 然而,其中每一個都有一些問題:
默認本地:
- 引用值可能依賴於上下文,因為尚未在本地定義的名稱回退到 Here 然後可能(如果 Names Default To Here 關閉) Global 然後是當前表。 如文檔中所述,這可能意味著行為更難預測,因為值取決於上下文。
明確聲明:
- 引用值可能依賴於上下文,因為如果未在本地名稱中聲明,名稱在聲明之前仍會使用此回退行為
- 賦值可能會意外洩漏到 Here 範圍內。 也就是說,如果本地名稱聲明中省略了一個本應是本地的名稱,那麼它將污染周圍的 Here 作用域
- 一般來說,這種外部範圍的污染很難追踪。
- 例如,如果您在使用“i”作為迭代器的 For 中調用一個函數,並且該函數也有一個使用 i 的 For,但未能將其聲明為本地,這將影響您的外部 For 循環。 誠然,這是一個明顯的程序員錯誤,但它很容易製作並且很難調試。
在我看來,理想的選擇是能夠聲明類似“Strict Local”的東西,它總是將非限定名稱(在分配值和引用值時)視為本地和周圍範圍只能使用限定名稱訪問。 這將使我不會冒污染周圍範圍的風險,也不會強迫我在依賴這些範圍時進行聲明,從而限制周圍範圍的局部污染。
腳本