【问题标题】:how to treat empty parameters in function calls?如何处理函数调用中的空参数?
【发布时间】:2011-09-08 21:31:26
【问题描述】:

当你调用像x = myfunc(a,b,,d) 这样的函数时,第三个参数会发生什么?是空的吗?空值?什么都没有?

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

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

给我一​​个可怕的type mismatch

附:我正在尝试用 vbscript 函数替换 COM 对象,这些空参数调用是对那些没有问题的 COM 对象进行的,但 vbscript 不喜欢它们。我不能改变调用,只有函数,所以我需要以某种方式处理空参数,只是不知道如何(尝试 isnull 没有运气,也 isempty 没有运气,is nothing 给了我一个 object required 错误)

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    遗漏参数的数据类型为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
    

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

    【讨论】:

    • +1 以获得准确的答案...但恕我直言,为= vbError 编写包装函数有点过头了!
    【解决方案2】:

    本着教人钓鱼的精神:

    TypeName 函数会告诉你它是什么类型。

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

    您可以像这样测试省略的参数,而不是 if p3 &lt;&gt; ""

        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 并不是真正用来处理“可选”参数的。

    【讨论】:

    • 很好,感谢您的学习。我以前认为这只能通过涉及 On Error Resume Next 的 hack 来完成。
    【解决方案3】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 2021-01-17
      • 2019-08-29
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多