有没有办法检查VBScript函数是否已定义?

15

这可能只是一厢情愿的想法...

有没有办法在调用ASP/VBScript函数之前检查它是否已定义?

3个回答

16

这是我的解决方案,它基于同样的原理,但是“hacky-ness”相当自包含:

Function FunctionExists( func_name )
    FunctionExists = False 

    On Error Resume Next

    Dim f : Set f = GetRef(func_name)

    If Err.number = 0 Then
        FunctionExists = True
    End If  
    On Error GoTo 0

End Function 

2
是的 - 那就是我最终对它所做的。 :-) - Matthew Cole
1
你可以简化这个代码为 FunctionExists = (Err.Number = 0) 来设置布尔值。 - user692942
@Lankymart,不起作用。不确定为什么。 - Elliptical view
如果 Err.number = 0,则可以简化为:FunctionExists = True。 - Elliptical view

6

这是一种有点巧妙的方法,它依赖于设置了“On Error Resume Next”,但你可以像这样做:

On Error Resume Next
Dim objRef1, objRef2
Set objRef1 = GetRef("DoStuff1")
If objRef1 Is Nothing Then
    Call objRef1
Else
    MsgBox "DoStuff1 is not defined!"
End If

Set objRef2 = GetRef("DoStuff2")
If objRef2 Is Nothing Then
    MsgBox "DoStuff2 is not defined!"
Else
    Call objRef2
End If

Sub DoStuff1
    MsgBox "DoStuff1!"
End Sub

如果您尝试获取指向不存在的子程序或函数的指针(如DoStuff2),则调用GetRef将生成异常。然后,您可以检查是否按预期设置了引用。


否则,您将在尝试调用函数后检查 Err.Number。但是,您调用的函数可能已定义、被调用,但却是错误的源头,我想这不是您想要的。 - Xiaofu

0
提供的答案是正确的,我只是进行了一个简单的修改,添加了Err.Clear并基于提供的答案压缩了函数。

我还将函数重命名为更合适的名称,以反映它可以用于检查函数和子程序的存在。

Function ProcExists(ByVal ProcName)

 On Error Resume Next
  Set ProcName = GetRef(ProcName)
  ProcExists   = (Err.Number = 0)
  Err.Clear
 On Error GoTo 0

End Function

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