2014-10-06 30 views
1

我有代碼基於字符串使用Eval和執行生成變量。 但是,無論出於何種原因,當我試圖將變量設置爲變量時,Execute將空變量留空。但是,如果我將它設置爲一個字符串正常工作手動VBScript執行不爲變量,但爲字符串

這不起作用,給人一個空盒子:

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 

所以執行似乎不喜歡這裏的變量。更奇怪的是,在我的VBSEdit調試器中,我可以看到當地人,它創建了一個名爲「test」的局部變量,而不是將值設置爲alias_j變量。現在完全混淆了我。

+0

不要構建這樣的變量的值。永遠。如果你需要索引變量:使用數組。這就是他們發明的。 – 2014-10-06 16:20:41

+0

其實我會用字典..並會使用字典..有字典的另一個VB - ISM,所以我想嘗試一些更有創意的數組,但不想迭代數組。但是現在我的字典正常工作,所以這已經失效了。還有很好的信息......人們太害怕2個最強大的功能。 – Dss 2014-10-06 20:32:36

+0

你很迷惑「害怕」和「謹慎」。 – 2014-10-07 06:48:05

回答

2

您是否嘗試創建名爲alias_0alias_2的變量併爲每個值賦值?如果是這樣,這應該工作。它指定test0alias_0test1alias_1等:

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

是的。它做到了。謝謝!我認爲問題是「+」試圖做數學..因爲我在我原來的帖子錯了..它只適用於一個變量,如果它是一個數字。但是你的方式在字符串上工作正常。謝謝! – Dss 2014-10-06 14:01:23

+1

我_just_幾秒前更新了我的答案。再看看。而且,是的,總是用'&'代替'+'來表示字符串連接。 – Bond 2014-10-06 14:02:19

+0

@Bond個人觀點在這裏,但我儘量避免&作爲一個串聯運算符,只要我可以。它隱藏了轉換。調試足夠的其他人民腳本,它變得非常討厭。 很明顯,我仍然使用&當我只是在制定一個想法。或者在稀有時候,我不會知道類型。否則,它將與Cxxx系列轉換函數的CStr()一起使用。 也許這只是我的心態來自類型化/強類型的C/C++/C#背景但我更喜歡TELLING VBScript我希望我的變量在任何特定的時間,而不是依靠VBScript來決定什麼是最好的。 – TofuBug 2015-01-27 13:45:52