这似乎是一个非常基本的问题,但我仍然无法找到答案。
在VBScript中,使用Dim语句多次声明相同的标量变量有什么危害吗?
我正在开展一些相关项目并开发一些我想重复使用的代码片段。但是,我有点担心使用两次使用相同变量名的代码是否有问题,如下所示:
Dim i
for i = 1 to Count
'* doin' somethin' here
next
Dim i
for i = 1 to UnrelatedOtherCount
'* doin' somethin' different yo
next
它不仅仅是迭代循环变量;我可能在脚本中有多个位置使用正则表达式。如果我的脚本使用了两段代码被重用,并且每个代码都使用了" patternString"变量并从声明变量开始:
'* first section of code from the folder
Dim objPersonRegex, patternString
Set objPersonRegex = new RegExp
...
'* a completely different section of code
Dim objBuildingRegex, patternString
Set objBuildingRegex = new RegExp
我的直觉是说不应该是一个问题,Dim只是创建一个给定名称的变量,如果它不是已经存在,如果确实如此,那就继续下去,因为它被告知要完成的事情。但事实确实如此吗?如果重要,这些是在Windows脚本宿主上运行的脚本。
(为了澄清我担心的事情,我对值担心变量遭到破坏的情况感到非常担心。如果我需要为了保留变量的值,我将它保存在一个不同的变量中,一个变量具有唯一的名称。)
我自己试图查找答案的所有尝试都失败了;它们只返回有关在一行上声明多个变量的信息,并在数组上使用ReDim。
答案 0 :(得分:4)
对变量多次变暗有害吗?
不可能对变量进行多次变暗。 不使用Option Explicit
和On Error Resume Next
都不会在同一个编译单元中为同一个变量(名称)获取多个Dim过了'编译'。
答案 1 :(得分:1)
Dim并不只是创建然后重新创建变量。它为它分配一个内存地址。 因此,假设您正在使用OPTION EXPLICIT打开编码,它甚至不会让您这样做。
然而......作为一个例子,你在那里展示的并不是再次声明变量。无论如何,都不一样。那不是"变暗"。它只是暂时使用并在完成时扔掉。所以,在这方面,你正在以正确的方式做到这一点。
如果要为循环中运行的每个小事件创建一个新变量,当它们彼此不相互干扰时,这会变得相当低效。
答案 2 :(得分:0)
在第一个例子中,我会说它是有害的,因为它意味着你用OPTION EXPLICIT OFF进行编码。 不要那样做。保持该选项。
对于第二个例子,如果它们真的是不同的代码段,在不同的“命名空间”(就像vbscript有这个概念......不同的模块,我猜),你可能还可以。但是,该代码足够相似,我会考虑编写一个方法来完成你将要做的任何事情。然后调用方法。
但是,如果第二个示例中的片段在同一个模块中,则会出现问题...部分原因在于我的第一段,部分原因是它可能会导致一种非常特殊的错误。想象一下,你在代码中犯了一个错误,在patternString
的最后一个样本中可能会以某种方式取消分配。如果它是一个全新的变量,那就会导致错误,这样我们就知道出了什么问题。使用当前代码,可以使用旧模式运行代码。这比错误更糟,因为它可能导致程序执行诸如对数据库进行意外更改或向错误用户显示敏感数据之类的事情。