2008-09-26 8 views
7

Estoy tratando de devolver un diccionario desde una función. Creo que la función funciona correctamente, pero no estoy seguro de cómo utilizar el diccionario devuelto.VBScript: ¿Cómo utilizar un objeto de diccionario devuelto por una función?

Aquí es la parte pertinente de mi función:

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 

Como llamar en esta función y uso el diccionario devuelto?

EDIT: He intentado esto:

Dim someStuff 
someStuff = GetSomeStuff 

y

Dim someStuff 
Set someStuff = GetSomeStuff 

Cuando intento acceder a la someStuff, me sale un error:

Microsoft VBScript runtime error: Object required: 'GetSomeStuff' 

EDIT 2: Tratar esto en la función:

Set GetSomeStuff = stuff 

Los resultados en este error:

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

Respuesta

22

No estaba muy seguro de cuál era su problema, así que experimenté un poco.

Parece que acabas de perder que para asignar una referencia a un objeto, usted tiene que utilizar set, aunque sea por un valor de retorno:

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

me faltaba la combinación de Conjunto GetSOmeStuff = cosas y conjunto D = GetSomeStuff. ¡Gracias! – aphoria

+0

@ user66001 No creo que sea una buena idea intentar editar el código (o la respuesta) de otra persona (además de tareas como correcciones de errores, actualizaciones de URL, etc.), especialmente para ese punto menor, especialmente cuando están equivocados ... Si reemplaza 'd' con el nombre de la función, llama a la función cada vez que aparece. La falta de '()' podría haberle inducido a error al usar una llamada a función como una variable. No veo el sentido de crear la estructura 'stuff' cada vez. No es crítico aquí, para una demostración tan simple, pero puede ser importante en un programa real. – PhiLho

+0

@PhiLho - Mi error. Lo siento (creo que importa por principio, así que borré mi información incorrecta). – user66001

0

¿Has probado:

Dim returnedStuff 
Set returnedStuff = GetSomeStuff() 

Entonces "para cada" iteración en el diccionario? Hay un ejemplo del uso del diccionario (aunque para VB6, ¡aunque la esencia es la misma!) here.

4

Ha intentado hacer
set GetSomeStuff = stuff
en la última línea de la función?

Cuestiones relacionadas