2

我正在用 VBScript 做一些 ASP Classic。我正在做类似以下的事情,

Public Sub testFunc(ByRef a)
    a=10
End Sub

Public Function createDict()
    Set createDict = CreateObject("Scripting.Dictionary")
    createDict.Add "foo",0
End Function

Set b = createDict()
testFunc b("foo")
Response.Write(b.Item("foo")) 'The result is 0, instead of 10

我想知道如何创建一个可以修改字典项的函数/子。可以在 VBScript 中这样做吗?

即使我尝试过

Set c = CreateObject("Scripting.Dictionary")
c.Add "foo",0
testFunc c("foo")
Response.Write(c("foo"))

它也不起作用。

4

2 回答 2

2

collection(index)如果您在除赋值 (=) 左侧以外的其他上下文中使用表达式,您将在该索引处获得集合元素的(副本)值。因此,要更改元素的 Sub 或 Function 必须通过其参数列表获取集合、索引和新值。

于 2013-10-28T11:59:52.780 回答
1

就 VBScript 而言,以下内容对我来说很好......

Sub Test()
Dim X, W
Set X = Nothing
Set X = PassDictionary
If Not X Is Nothing Then
    For Each W In X.Keys
        MsgBox W & " : " & X.Item(W)
    Next
End If
End Sub

Function PassDictionary()
Dim objDic
Set objDic = CreateObject("Scripting.Dictionary")
objDic.Add "One", objDic.Count + 1
objDic.Add "Two", objDic.Count + 1
objDic.Add "Three", objDic.Count + 1
Set PassDictionary = objDic
End Function

编辑:通过添加一个额外的参数并将 Dictionary 对象本身传递给“testfunc”例程,我能够修改 Dictionary 对象。

Public Sub testFunc(a, b)
    a(b) = 10
End Sub

Public Function createDict()
    Set createDict = CreateObject("Scripting.Dictionary")
    createDict.Add "foo", 0
End Function

Set b = createDict()
Call testFunc(b, "foo")
Response.Write (b.Item("foo")) 
于 2013-10-28T04:56:05.510 回答