这是一个不错的疯狂发现:
Option Explicit
ExecuteGlobal "Option Explicit: Dim TestVar: TestVar=41"
ExecuteGlobal "Option Explicit: TestVar=42"
MsgBox "TestVar=" & CStr (TestVar)
按预期工作 - 显示 42。
和:
Option Explicit
ExecuteGlobal "Option Explicit: TestVar: TestVar=41"
MsgBox "TestVar=" & CStr (TestVar)
在 ExecuteGlobal 调用中产生“未定义的变量”,因为未定义 TestVar。好的。
我不明白的是:
Option Explicit
ExecuteGlobal "Option Explicit: Dim TestVar: TestVar=41"
ExecuteGlobal "Option Explicit: Dim TestVar: TestVar=42"
MsgBox "TestVar=" & CStr (TestVar)
不会在第二次调用中抛出“重新定义的标识符” ExecuteGlobal
,而是显示 42 - 就好像Dim
第二次ExecuteGlobal
调用中的 不存在一样。
如果你对Class
声明做同样的事情,一切都很好,即你不能在任何情况下重新定义一个类。
我勒个去?
我的问题是:为什么ExecuteGlobal
允许我重新定义全局变量,而 a) ExecuteGlobal 确实禁止访问未声明的变量和 b) 类定义的处理方式不同?
我确实有一个导致这种情况的用例(在测试运行时生成源代码并通过 ExecuteGlobal 执行它,因为一些不像你可能期望的那样奇怪的原因),但我刚刚提出的观点足够有效,没有我认为对现实世界场景的描述。
我在使用 QTP(HP QuickTest Professional)时遇到了这种情况,它使用 VisualBasic 脚本主机引擎进行脚本播放,但仅在 VB 脚本主机中情况完全相同。