VBScript:如何使用从函数返回的字典对象?

10
我正在尝试从一个函数返回一个字典。我相信这个函数已经正确地工作了,但我不确定如何利用返回的字典。
以下是我的函数相关部分:
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

我该如何调用这个函数并使用返回的字典?
编辑:我尝试过以下代码:
Dim someStuff
someStuff = GetSomeStuff

并且

Dim someStuff
Set someStuff = GetSomeStuff

当我尝试访问 someStuff 时,我遇到了一个错误:

Microsoft VBScript runtime error: Object required: 'GetSomeStuff'

编辑 2:在函数中尝试此操作:

Set GetSomeStuff = stuff

导致此错误的结果:

Microsoft VBScript runtime error: Wrong number of arguments or invalid property assignment.
3个回答

25

我不太确定你的问题是什么,所以我进行了一些实验。

看起来你只是错过了将引用分配给对象的步骤,你必须使用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

我错过了Set GetSomeStuff = stuff和Set d = GetSomeStuff的组合。谢谢! - aphoria
@user66001 我认为尝试编辑别人的代码(或答案!)不是一个好主意(除了像错别字修正、URL更新等任务),特别是在这样微小的点上,尤其当你是错误的时候...如果你用函数名替换 d,你会在每个出现的地方调用该函数。缺少 () 可能会让你误将函数调用视为变量。我不明白每次都创建 stuff 结构的意义所在。对于这样简单的演示来说,这并不重要,但在实际程序中可能很重要。 - PhiLho
@PhiLho - 我犯了一个错误。抱歉。(我认为原则上这很重要,所以删除了我的错误信息)。 - user66001

4

你试过在函数的最后一行添加
set GetSomeStuff = stuff
吗?


0
你尝试过吗:
Dim returnedStuff
Set returnedStuff = GetSomeStuff()

那么使用“对于每个”循环遍历字典?这里有一个使用字典的示例(尽管是针对VB6的,但其要点是相同的!)在这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接