Function VBScript:将对象传递给函数?

Function VBScript:将对象传递给函数?,function,vbscript,Function,Vbscript,下面的示例生成一个错误: VBScript编译错误:调用子脚本时不能使用括号 如果不是所有参数都是对象,则不会发生此错误 是否有特殊的方法将对象参数传递给VBScript函数 Option Explicit Dim obj Function TestFunc(obj) WScript.Echo "Why doesn't this work?" End Function Set obj = CreateObject("Scripting.Dictionary") obj.Add("key"

下面的示例生成一个错误:

VBScript编译错误:调用子脚本时不能使用括号

如果不是所有参数都是对象,则不会发生此错误

是否有特殊的方法将对象参数传递给VBScript函数

Option Explicit

Dim obj

Function TestFunc(obj)
 WScript.Echo "Why doesn't this work?"
End Function

Set obj = CreateObject("Scripting.Dictionary")
obj.Add("key", "val")

TestFunc(obj) ' Error here!
这条线

obj.Add("key", "val")
是什么导致了这个问题

改为

obj.Add "key", "val"

Add是一个sub,就像错误中所说的那样,不能使用parens,但TestFunc是一个函数,可以使用parens调用。只有在获得返回值时才使用括号。对于不返回内容的函数,也可以使用Sub而不是Function。

括号只能在..时使用

  • 您正在调用一个返回值的函数
  • 当您正在调用的子函数只接受1个参数时
  • 如果在调用之前使用
    call
    关键字,例如
    calltestfunc(obj)

  • 仅当函数返回值(或子函数只接受1个参数)时,才能使用括号。仅仅使用function关键字是不够的,这是有效的。我使用的函数实际上返回了一个值,但我没有将它赋给任何对象。如果我指定返回值或删除括号,它就会工作。这种行为很奇怪,但考虑到VBScript已经存在了这么长时间,我并不感到惊讶。谢谢