默认本地与本地人的显式声明您好,我正在尝试了解如何最好地限制我在函数本地范围方面的风险。 根据我的理解,我的选择是限制从函数执行中污染 Here 范围的可能性,要么声明我的局部变量,要么使用 Default Local。 然而,其中每一个都有一些问题:
默认本地:
- 引用值可能依赖于上下文,因为尚未在本地定义的名称回退到 Here 然后可能(如果 Names Default To Here 关闭) Global 然后是当前表。 如文档中所述,这可能意味着行为更难预测,因为值取决于上下文。
明确声明:
- 引用值可能依赖于上下文,因为如果未在本地名称中声明,名称在声明之前仍会使用此回退行为
- 赋值可能会意外泄漏到 Here 范围内。 也就是说,如果本地名称声明中省略了一个本应是本地的名称,那么它将污染周围的 Here 作用域
- 一般来说,这种外部范围的污染很难追踪。
- 例如,如果您在使用“i”作为迭代器的 For 中调用一个函数,并且该函数也有一个使用 i 的 For,但未能将其声明为本地,这将影响您的外部 For 循环。 诚然,这是一个明显的程序员错误,但它很容易制作并且很难调试。
在我看来,理想的选择是能够声明类似“Strict Local”的东西,它总是将非限定名称(在分配值和引用值时)视为本地和周围范围只能使用限定名称访问。 这将使我不会冒污染周围范围的风险,也不会强迫我在依赖这些范围时进行声明,从而限制周围范围的局部污染。
脚本