2009-05-18 12 views
6

अद्यतन: उत्तर के आधार पर मैंने शुरुआत में IsInstanceOf() का उपयोग करने का मार्ग चलाया जो इस आवश्यकता के लिए डिज़ाइन किया गया था। हालांकि यह किसी अज्ञात कारण के लिए बेहद अक्षम है। ऐप को डिबग करने में बाद में मैंने ऑब्जेन्स पर कुछ गुणों को केवल इन्सस्टेंस के बजाय उपयोग करने के लिए समाप्त कर दिया जिसके परिणामस्वरूप परिमाण गति सुधार के क्रम में।क्या किसी ऑब्जेक्ट को किसी घटक प्रकार और/या विरासत प्रकार के विरुद्ध परीक्षण करना संभव है?

जो मैं करने की कोशिश कर रहा हूं वह यह देखने के लिए कि किस प्रकार का घटक है, कोल्डफ्यूजन में एक ऑब्जेक्ट का परीक्षण करना है। कुछ की तरह ...

<cfif isValid("compath.dog", currentObj)> 
    ...do something specific with dog objects... 
</cfif> 

मैंने सोचा था कि यह संभव हो गया था लेकिन कह प्रकार मैं गुजर रहा प्रकार के वैध सूची में एक के अनुरूप नहीं है कोई त्रुटि प्राप्त ...

मान्य प्रकार तर्क हैं: कोई, सरणी, बूलियन, दिनांक, संख्यात्मक, क्वेरी, स्ट्रिंग, संरचना, यूयूआईडी, GUID, बाइनरी, पूर्णांक, फ्लोट, यूरोोडेट, समय, क्रेडिट कार्ड, ईमेल, एसएसएन, टेलीफोन, ज़िप कोड, यूआरएल, रेगेक्स, रेंज, घटक, या variableName।

क्या इसे कोल्डफ्यूज़न में पूरा करने का कोई तरीका है?

+1

मेरा मानना ​​है कि दस्तावेज़ कहां कहता है, उस घटक में "घटक", आप सचमुच "घटक" दर्ज कर सकते हैं और यह मूल्यांकन करेगा कि चर एक घटक है या नहीं। यह जांचने के लिए कि क्या यह एक विशिष्ट घटक वर्ग है, नीचे सैम किसान का उदाहरण उपयोग करें। –

उत्तर

7

आप IsInstanceOf() का भी उपयोग कर सकते हैं। यद्यपि आपको अभी भी पूर्ण पथ का उपयोग करना होगा, फिर भी इसका उपयोग विरासत को निर्धारित करने या किसी विशेष इंटरफ़ेस को लागू करने वाले घटकों की पहचान करने के लिए भी किया जा सकता है।

<cfif IsInstanceOf(obj, "compath.Dog")> 
    yes. it is a dog component {woof} 
<cfelse> 
    some other type of component 
</cfif> 

<cfif IsInstanceOf(obj, "compath.AnimalInterface")> 
    yes. it implements the animal interface 
<cfelse> 
    no. it must be vegetable or mineral ... 
</cfif> 
+0

धन्यवाद! यह वही है जो मैं ढूंढ रहा हूं। यह वास्तव में आपको प्रकार की तुलना के लिए एक सापेक्ष घटक पथ का उपयोग करने की अनुमति देता है जो मैं चाहता था। –

8

आप प्रकार ढूंढने के लिए GetMetaData का उपयोग कर सकते हैं। कुछ त्वरित कोड:

<cfif GetMetaData(currentObj).type eq "compath.dog"> 
+0

ऐसा लगता है कि GetMetaData समाधान धारण कर सकता है। "प्रकार" संपत्ति सिर्फ "घटक" कहती है लेकिन अन्य गुण हैं जिनके पास पूर्ण नाम "जैसे" नाम "और" पूर्ण नाम "है। हालांकि, मैंने सोचा कि पूर्णपतियों की बजाय सापेक्ष प्रकारों का परीक्षण करने का एक तरीका था। हालांकि मैं गलत तरीके से याद कर रहा हूं। –

3

आप getmetadata() फ़ंक्शन से नाम या पूर्ण नाम का उपयोग कर सकते हैं।

<cfif GetMetaData(currentObj).name eq "compath.dog"> 
    ...do something specific with dog objects... 
</cfif> 

या

<cfif GetMetaData(currentObj).fullname eq "compath.dog"> 
    ...do something specific with dog objects... 
</cfif> 

डॉक्स यहाँ getmetadata() क्या getmetadata पर हैं() रिटर्न वस्तु प्रकार के आधार पर।

0

दान, एमएक्सयूनीट से कोड को चीरने के लिए स्वतंत्र महसूस करें जो आपको वास्तव में करने की ज़रूरत है। हम इसे अपने assertIsTypeOf() दावे में करते हैं। विवरण के लिए यहां देखें: http://code.google.com/p/mxunit/source/browse/mxunit/trunk/framework/MXUnitAssertionExtensions.cfc

कारण है कि आप प्रदर्शन को देख रहे हैं IstanceOf() को सबसे अधिक संभावना है कि यह.customTagPaths को आपके application.cfc में सेट करने के साथ करना होगा। मैंने इसे खुद मारा और हाल ही में एक बग दायर किया। उम्मीद है कि यह सीएफ 10 में तय होगा, जब भी वह हो।

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