2011-12-13 13 views
8

Ecco una davvero bizzarra bug di recente mi sono imbattuto in CF9. Qualcuno ha idea del perché si sta verificando e se sto facendo qualcosa di sbagliato, o c'è una correzione disponibile. Guarda il seguente codice. Prendiamo una stringa, aggiungiamo una A, aggiungiamo una B, e poi proviamo ad aggiungere una C ... tuttavia il risultato che otteniamo è "ababc". Il risultato atteso è "abc". Il bug si verifica solo se si esegue un argomento con nome AND una struct implicita nell'argomento passa AND un operatore nella chiamata di funzione. Se qualcuno di questi 3 casi non è presente, il bug non si verifica. Qualche idea, perché?Bizzarro bug con argomenti con nome e la creazione struct implicita nella funzione di chiamata

<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

Wow, è molto strano.Fai un bug report con Adobe. –

+1

Già fatto in realtà http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=87217. vedi se io t gira tutto. – Nucleon

+0

restituisce "abc" nel mio notebook, XP SP2, ColdFusion Server Developer 9,0,0,251028 – tsurahman

risposta

2

Bene: hai un po risposto alla tua domanda qui: Succede perché si tratta di un bug. Gli errori capitano. È bello che tu abbia avuto il tempo di consigliarlo ad Adobe.

Per quanto riguarda arounds di lavoro, queste due variazioni funzionare bene:

<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> 

Oppure:

<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> 

Sei solo andando avere a che fare una cosa del genere fino a quando Adobe ottiene intorno al fissaggio: - (

+1

o semplicemente: '' mantieni uno linea. – Henry

Problemi correlati