当您调用类似x = myfunc(a,b,,d)
的函数时,第3个参数会发生什么?它是空的吗?空值?什么?
我的功能有问题,比如说,
function myfunc(p1, p2, p3, p4)
if p3 <> "" then whatever
end function
给了我一个可怕的type mismatch
P.S。我正在尝试用vbscript函数替换COM对象,并且那些空参数调用是对COM对象完成的,这些对象没有问题,但是vbscript不喜欢它们。我无法改变调用,只有函数,所以我需要以某种方式处理空参数,只是不知道如何(尝试isnull没有运气,也没有运气,is nothing
给了我一个{{ 1}}错误)
答案 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