2011-12-13 8 views
8

यहां एक वास्तव में विचित्र बग है जिसे मैंने हाल ही में CF9 में पार किया था। किसी के पास कोई सुराग है कि यह क्यों हो रहा है और यदि मैं कुछ गलत कर रहा हूं, या एक हॉटफिक्स उपलब्ध है। निम्नलिखित कोड को देखो। हम एक स्ट्रिंग लेते हैं, ए जोड़ते हैं, एक बी जोड़ते हैं, और उसके बाद सी को जोड़ने का प्रयास करते हैं ... फिर भी हमें जो परिणाम मिलता है वह "ababc" होता है। अपेक्षित परिणाम "एबीसी" है। बग केवल तब होता है जब आप नामित तर्क और तर्क कॉल में एक निहित संरचना करते हैं और फ़ंक्शन कॉल में &= ऑपरेटर करते हैं। यदि उनमें से कोई भी 3 मामला नहीं है, तो बग नहीं होता है। कोई विचार क्यों?नामित तर्कों के साथ विचित्र बग और फ़ंक्शन कॉल में अंतर्निहित संरचना निर्माण

<cffunction name="test"> 
    <cfargument name="widget"> 

    <cfset var locals = StructNew()> 

    <cfreturn arguments.widget.value> 
</cffunction> 

<cfset return = ""> 
<cfset return &= "a"> 
<cfset return &= "b"> 
<cfset return &= test(widget = { value = "c" })> 
<cfoutput>#return#</cfoutput> 
+1

वाह, यह बहुत अजीब है। एडोब के साथ एक बग रिपोर्ट दर्ज करें। –

+1

वास्तव में पहले से ही http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=87217 होगा। देखें कि मैं टी कुछ भी बदल जाता है। – Nucleon

+0

मेरी नोटबुक, एक्सपी एसपी 2, कोल्डफ्यूजन सर्वर डेवलपर 9,0,0,251028 – tsurahman

उत्तर

2

ठीक है: आपने थोड़े से अपने प्रश्न का उत्तर दिया है: ऐसा इसलिए होता है क्योंकि यह एक बग है। कीड़े होती है। यह अच्छा है कि आपने एडोब को इसके बारे में सलाह देने के लिए समय निकाला है।

काम arounds के लिए के रूप में, इन दो रूपों अच्छा काम:

<cfset return = ""> 
<cfset return &= "a"> 
<cfset return &= "b"> 
<cfset st = { value = "c" }><!--- refactor where the struct is created ---> 
<cfset return &= test(widget = st)> 
<cfoutput>#return#</cfoutput> 

या:

<cfset return = ""> 
<cfset return &= "a"> 
<cfset return &= "b"> 
<cfset temp = test(widget = { value = "c" })><!--- refactor where the function is called ---> 
<cfset return &= temp> 
<cfoutput>#return#</cfoutput> 

तुम बस करने वाले हैं जब तक एडोब यह तय करने के लिए चारों ओर हो जाता है ऐसा ही कुछ करना है: - (

+1

या बस: "" इसे एक रखें लाइन। – Henry

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