【问题标题】:VBScript Execute not working for variable, but does for stringVBScript Execute 不适用于变量,但适用于字符串
【发布时间】:2014-10-06 13:43:02
【问题描述】:

我有代码可以使用 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 变量。现在完全让我感到困惑。

【问题讨论】:

  • 不要这样构造变量。曾经。如果您需要索引变量:使用数组。这就是他们发明的目的。
  • 实际上我会使用字典.. 并且将使用字典.. 有另一个带有字典的 vb 主义,所以我尝试使用数组更有创意,但不想要迭代数组。但是我的字典现在可以正常工作了,所以它已经失效了。仍然很好的信息...人们太害怕 2 个最强大的功能。
  • 你混淆了“害怕”和“谨慎”。

标签: vbscript eval execute


【解决方案1】:

您是否尝试创建名为 alias_0alias_2 的变量并为每个变量分配一个值?如果是这样,这应该工作。它将值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

【讨论】:

  • 是的。做到了。谢谢!我认为问题在于“+”试图进行数学运算。因为我在原来的帖子中错了。如果它是一个数字,它只适用于一个变量。但是你的方式适用于字符串。谢谢!
  • 刚刚在几秒钟前更新了我的答案。再看看。而且,是的,始终使用& 代替+ 进行字符串连接。
  • @Bond 个人意见,但我尽量避免将 & 作为连接运算符。它隐藏了转换。调试足够多的其他人的脚本,这真的很烦人。显然,当我只是想出一个想法时,我仍然使用 & 。或者在罕见的时候我不知道类型。否则它是 + 与 Cxxx 系列转换函数的 CStr() 。也许这只是我来自类型化/强类型化 C/C++/C# 背景的心态,但我更喜欢在任何特定时间告诉 VBScript 我希望我的变量是什么,而不是依靠 VBScript 来决定什么是最好的。
  • @TofuBug 你真的应该使用&& 已经将两种类型都转换为字符串,因此无需进行不必要的 CStr() 转换。使用无类型语言的美妙之处在于您不必不断地在类型之间强制转换值。您正在拿走最好的功能之一,并将其​​视为一种强类型语言,这实际上只是更多的工作。 str12 = CStr("1") + CStr("2") 太过分了。您可能会争辩说您的代码更具可读性,因为您明确说明了您的类型。我会反对。更混乱是因为你对它们没有清楚的了解。
  • @TofuBug(我上一篇文章中的字符用完了!)。你是对的,不过,这是个人喜好。我并不是要侮辱你的偏好。只知道& only 进行字符串连接。就是这样。 + 被重载以处理整数和实数算术以及字符串连接,因此,除非你勤于在任何地方使用 CStr(),否则你可能得不到你想要的。
猜你喜欢
  • 2017-01-06
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
相关资源
最近更新 更多