我正在使用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"))
它也不起作用。
答案 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"))