VBScript字典项通过byref

时间:2013-10-28 03:33:09

标签: asp-classic vbscript

我正在使用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"))

它也不起作用。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

编辑:通过添加一个额外的Argument并将Dictionary对象本身传递给" testfunc"例程我能够修改字典对象。

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"))