如何处理函数调用中的空参数?

时间:2011-09-08 21:31:26

标签: vbscript

当您调用类似x = myfunc(a,b,,d)的函数时,第3个参数会发生什么?它是空的吗?空值?什么?

我的功能有问题,比如说,

function myfunc(p1, p2, p3, p4)  
  if p3 <> "" then whatever  
end function

给了我一个可怕的type mismatch

P.S。我正在尝试用vbscript函数替换CO​​M对象,并且那些空参数调用是对COM对象完成的,这些对象没有问题,但是vbscript不喜欢它们。我无法改变调用,只有函数,所以我需要以某种方式处理空参数,只是不知道如何(尝试isnull没有运气,也没有运气,is nothing给了我一个{{ 1}}错误)

3 个答案:

答案 0 :(得分:6)

错过参数的数据类型是ERROR 我写了一个例子,尝试以下内容:

Function IsMissing(p)
    IsMissing = (VarType(p) = vbError)
End Function

Function Myfunc(p1, p2, p3, p4)
    If IsMissing(p1) Then Response.Write "p1 is missing "
    If IsMissing(p2) Then Response.Write "p2 is missing "
    If IsMissing(p3) Then Response.Write "p3 is missing "
    If IsMissing(p4) Then Response.Write "p4 is missing "
End Function

str = myfunc(, , , 1)
'str = myfunc(1, 2, , ) 'causes error

注意:由于语法错误,函数/ sub的最后一个参数不能为空。

答案 1 :(得分:2)

本着教人钓鱼的精神:

TypeName函数会向您显示它是什么类型。

MsgBox TypeName(p3) ' Returns string: "Error"

您可以测试省略的参数,而不是if p3 <> ""

    If TypeName(p3) = "Error" Then MsgBox "Whatever!"

或者,最好是

    If VarType(p) = vbError Then MsgBox "Whatever!"
    ' vbError is a built-in constant whose value is 10.

但实际上,对于最佳实践,您的程序设计应避免忽略参数。 VBScript并不是真正用于处理“可选”参数。

答案 2 :(得分:0)

VBScript不支持可选参数。可以通过传入数组或空值来模拟它们,这对您的情况没有帮助,因为您无法更改调用。下一个解决方案可能是考虑更改平台(我可能会建议.Net)或On Error Resume Next hack,如下所示。

'Assuming a String Parameter
Dim strOptionalParameter As String
strOptionalParameter = p3

'We set the value of the optional parameter to a variable
'in case it blows up and moves on to this next statement.
If strOptionalParameter <> "" Then
'Rest of Code Here
End If