VBScript执行不适用于变量,但适用于字符串

VBScript执行不适用于变量,但适用于字符串,vbscript,eval,execute,Vbscript,Eval,Execute,我已经有了使用Eval和Execute基于字符串构建变量的代码。 但无论出于何种原因,当我试图将变量设置为变量时,Execute将变量留空。但如果我手动将其设置为字符串,则效果很好 这不起作用,将显示一个空框: For j = 0 To 2 name = "alias_" & j val = "test" Execute(Eval("name") + "=" + val) msgbox(Execute(Eval("name")) Next 这确实有效,在

我已经有了使用Eval和Execute基于字符串构建变量的代码。 但无论出于何种原因,当我试图将变量设置为变量时,Execute将变量留空。但如果我手动将其设置为字符串,则效果很好

这不起作用,将显示一个空框:

For j = 0 To 2
    name = "alias_" & j
    val = "test"
    Execute(Eval("name") + "=" + val)
    msgbox(Execute(Eval("name"))
Next
这确实有效,在msgbox中显示“测试”:

For j = 0 To 2
    name = "alias_" & j
    Execute(Eval("name") + "=" + "test")
    msgbox(Execute(Eval("name"))
Next

所以Execute似乎不喜欢这里的变量。更奇怪的是,在我的VBSEdit调试器中,我可以看到局部变量,它创建了一个名为“test”的局部变量,而不是将值设置为alias_j变量。现在完全把我弄糊涂了。

您是否试图通过
别名2>创建名为
别名0
的变量并为每个变量赋值?如果是这样,这应该是可行的。它将值
test0
分配给
alias_0
test1
分配给
alias_1
,等等:

For j = 0 To 2
    name = "alias_" & j
    val = "test" & j
    Execute name & " = val"
    MsgBox Eval("alias_" & j)
Next

对成功了。谢谢我认为问题在于“+”试图做数学题。。因为我原来的帖子错了。。只有当变量是数字时,它才起作用。但是你的方式在弦上很好用。谢谢几秒钟前我刚刚更新了我的答案。再看一眼。而且,是的,总是使用
&
来代替
+
进行字符串连接。@在这里结合个人意见,但我尽量避免&作为连接运算符。它隐藏了转换。调试足够多的其他人的脚本,这真的很烦人。显然,当我刚想出一个主意时,我仍然使用。或是偶尔我不知道是哪种类型。否则,它将与Cxxx转换函数系列的CStr()一起使用。也许这只是我的思维模式,来自类型化/强类型C/C++/C#的背景,但我更喜欢告诉VBScript我希望在任何特定时间变量是什么,而不是依赖VBScript来决定什么是最好的。@tobug你应该真正使用
&
&
已经将这两种类型强制转换为字符串,因此不需要不必要的
CStr()
强制转换。使用无类型语言的好处在于不必在类型之间不断强制值。您正在删除其中一个最好的特性,并将其视为强类型语言,这实际上是更多的工作<代码>str12=CStr(“1”)+CStr(“2”)
是过度杀伤力。您可能会争辩说,您的代码更具可读性,因为您对类型的描述是明确的。我的观点正好相反。这更混乱,因为你对它们没有一个清晰的理解。@TofuBug(在我上一篇文章中没有角色了!)。不过,你说得对,这是个人喜好。我不是想侮辱你的偏好。只需知道
&
只进行字符串连接。就这样
+
被重载以处理整数和实数运算以及字符串连接,因此,除非您在任何地方都努力使用
CStr()
,否则您可能无法获得所需的。不要像这样构造变量。曾经如果需要索引变量:使用数组。这就是它们被发明的目的。实际上我会使用字典。。并将使用字典。。有另一个vb ism与字典,所以我尝试更具创造性的数组,但不想迭代数组。但我的字典现在运行正常,所以这是不存在的。还是很好的信息。。。人们太害怕两个最强大的功能。你把“害怕”和“警惕”混淆了。