【发布时间】:2016-03-10 23:17:35
【问题描述】:
有没有办法检查子或函数是否存在?
sub mySub()
'some code
end sub
类似if exist(mySub)
【问题讨论】:
-
如果这是因为您要链接多个源文件,您可以为每个源文件添加一个
const x = true,然后稍后检查x
标签: vbscript asp-classic
有没有办法检查子或函数是否存在?
sub mySub()
'some code
end sub
类似if exist(mySub)
【问题讨论】:
const x = true,然后稍后检查x
标签: vbscript asp-classic
所以我知道有一个更好的方法可以做到这一点,它使用GetRef()
Function Exist(procName)
On Error Resume Next
Dim proc: Set proc = GetRef(procName)
Exist = (Not proc Is Nothing)
End Function
Function Hello()
WScript.Echo "Hello Ran"
End Function
If Exist("test") Then 'Returns False (0)
WScript.Echo "Test Exists"
Else
WScript.Echo "Test Doesn't Exist"
End If
If Exist("Hello") Then 'Returns True (-1)
WScript.Echo "Hello Exists"
Else
WScript.Echo "Hello Doesn't Exist"
End If
输出
测试不存在 你好存在VBScript 中没有内置任何东西来执行此操作,但您可以使用 On Error Resume Next 和 ExecuteGlobal() 构建一些东西。
Function Exist(procName)
On Error Resume Next
ExecuteGlobal "Call " & procName & "()"
Exists = (Err.Number = 0)
End Function
Function Hello()
WScript.Echo "Hello Ran"
End Function
If Exist("test") Then 'Returns False (0)
WScript.Echo "Test Exists"
Else
WScript.Echo "Test Doesn't Exist"
End If
If Exist("hello") Then 'Returns True (-1)
WScript.Echo "Test Exists"
Else
WScript.Echo "Test Doesn't Exist"
End If
输出
测试不存在 你好冉 测试不存在这种方法的缺点是它实际上会运行该过程(如果存在)。
【讨论】:
ExecuteGlobal 在全局范围内执行,而 Execute 取决于范围,它适用于简单的命令,但我发现更复杂的命令 ExecuteGlobal 效果更好。
GetRef() 我知道存在一个(以前使用过),只是不记得该命令。查看更新的答案。
Function runIfExists(procName) On Error Resume Next Execute ("Call "&procName) End Function 但我得到一个错误错误'ASP 0115',可捕获错误(C0000005)你有什么建议给我吗?!