2011-12-13 14 views
8

Aquí hay un error realmente extraño que encontré recientemente en CF9. Alguien tiene una pista de por qué está ocurriendo y si estoy haciendo algo mal o hay una revisión disponible. Mira el siguiente código. Tomamos una cadena, agregamos una A, agregamos una B, y luego intentamos agregar una C ... pero el resultado que obtenemos es "ababc". El resultado esperado es "abc". El error solo se produce si realiza un argumento con nombre Y una estructura implícita en el paso de argumento Y un operador &= en la llamada a la función. Si alguno de esos 3 casos no está allí, el error no ocurre. ¿Alguna idea de por qué?Error extraño con argumentos nombrados y creación implícita de estructuras en la llamada a la función

<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, eso es muy extraño. Presente un informe de error con Adobe. –

+1

Ya lo hizo en realidad http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=87217. ver si yo t enciende todo. – Nucleon

+0

devuelva "abc" en mi computadora portátil, XP SP2, desarrollador ColdFusion Server 9,0,0,251028 – tsurahman

Respuesta

2

Bueno, usted ha respondido un poco a su propia pregunta aquí: sucede porque es un error. Los errores suceden Es bueno que se haya tomado el tiempo de aconsejar a Adobe al respecto.

En cuanto a arounds de trabajo, estas dos variaciones funcionar bien:

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

O:

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

¿Vas a tener que hacer algo así hasta que Adobe turno de poner fijándolo: - (

+1

o simplemente: '' mantenerlo uno línea. – Henry

Cuestiones relacionadas