2008-09-26 5 views
7

Я пытаюсь вернуть словарь из функции. Я считаю, что функция работает правильно, но я не уверен, как использовать возвращаемый словарь.VBScript: Как использовать объект словаря, возвращаемый функцией?

Вот соответствующая часть моей функции:

Function GetSomeStuff() 
    ' 
    ' Get a recordset... 
    ' 

    Dim stuff 
    Set stuff = CreateObject("Scripting.Dictionary") 
    rs.MoveFirst 
    Do Until rs.EOF 
    stuff.Add rs.Fields("FieldA").Value, rs.Fields("FieldB").Value 
    rs.MoveNext 
    Loop 

    GetSomeStuff = stuff 
End Function 

Как вызвать эту функцию и использовать возвращаемый словарь?

EDIT: Я попытался это:

Dim someStuff 
someStuff = GetSomeStuff 

и

Dim someStuff 
Set someStuff = GetSomeStuff 

Когда я пытаюсь получить доступ к someStuff, я получаю сообщение об ошибке:

Microsoft VBScript runtime error: Object required: 'GetSomeStuff' 

EDIT 2: Пытаюсь это в функции:

Set GetSomeStuff = stuff 

Результаты в этой ошибки:

Microsoft VBScript runtime error: Wrong number of arguments or invalid property assignment. 

ответ

22

Я не был уверен в вашей проблеме, поэтому немного поработал.

Похоже, что вы просто пропустили, что присвоить ссылку на объект, вы должны использовать set, даже для возвращаемого значения:

Function GetSomeStuff 
    Dim stuff 
    Set stuff = CreateObject("Scripting.Dictionary") 
    stuff.Add "A", "Anaconda" 
    stuff.Add "B", "Boa" 
    stuff.Add "C", "Cobra" 

    Set GetSomeStuff = stuff 
End Function 

Set d = GetSomeStuff 
Wscript.Echo d.Item("A") 
Wscript.Echo d.Exists("B") 
items = d.Items 
For i = 0 To UBound(items) 
    Wscript.Echo items(i) 
Next 
+0

Я отсутствующего сочетание Set GetSOmeStuff = вещи и Set д = GetSomeStuff. Благодаря! – aphoria 2008-09-26 17:21:50

0

Вы пробовали:

Dim returnedStuff 
Set returnedStuff = GetSomeStuff() 

Тогда "для каждого" Перебор словаря? Есть пример использования Словаря (хотя для VB6, суть этого же, хотя!) here.

4

Вы пробовали делать
set GetSomeStuff = stuff
в последней строке функции?