2009-05-28 13 views
14

यह शायद सिर्फ इच्छापूर्ण सोच है ...क्या यह देखने के लिए कोई तरीका है कि कोई VBScript फ़ंक्शन परिभाषित किया गया है या नहीं?

क्या यह देखने के लिए कोई तरीका है कि कोई एएसपी/वीबीस्क्रिप्ट फ़ंक्शन इसे कॉल करने से पहले परिभाषित किया गया है या नहीं?

उत्तर

6

यह यह करने के लिए के रूप में सेट होने "त्रुटि पर फिर से शुरू करें अगला" पर निर्भर करता है एक से थोड़ा hacky रास्ता है, लेकिन आप कुछ इस तरह कर सकता है:

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 

GetRef करने के लिए कॉल एक अपवाद है, तो उत्पन्न होगा उप-फ़ंक्शन जो आप पॉइंटर प्राप्त करने की कोशिश कर रहे हैं, मौजूद नहीं है (जैसा कि DoStuff2 के साथ यहां मामला है)। फिर आप जांच सकते हैं कि संदर्भ अपेक्षित के रूप में सेट किया गया था या नहीं।

+0

नहीं तो आप फ़ंक्शन को कॉल करने की कोशिश कर के बाद Err.Number जाँच में कर रहे हैं। लेकिन फिर जिस फ़ंक्शन को आप कॉल कर रहे हैं उसे परिभाषित किया जा सकता है, जिसे कॉल किया जा सकता है, लेकिन त्रुटि का स्रोत बनें, जो मुझे लगता है कि आप जो चाहते हैं वह नहीं है। – Xiaofu

+0

यह काम करता है। धन्यवाद! –

15

यहाँ मेरी समाधान है जो एक ही सिद्धांत पर काम करता है, लेकिन hacky सत्ता सुंदर आत्म निहित है:

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

हाँ - यही वह है जो मैंने इसके साथ किया। :-) –

+1

आप 'बूलेन' सेट करने के लिए 'FunctionExists = (Err.Number = 0)' पर इसे सरल बना सकते हैं। – Lankymart

+0

@ लंकीमार्ट, वही काम नहीं करता है। यकीन नहीं क्यों नहीं। –

संबंधित मुद्दे

 संबंधित मुद्दे