2011-07-11 13 views
7

Vi este ejemplo de código en una grabación y quería saber qué hacía la sintaxis de dos puntos. He buscado en la documentación, pero no he podido encontrar ninguna información sobre ella:Uso de dos puntos con argumentos con nombre en ColdFusion

weather.subscribe(observer: application.observers.currentConditions);

Sé que podemos utilizar de colon en CF9 para los operadores ternarios:

result = (condition) ? true : false;

Pero en este caso parece que se está utilizando para proporcionar argumentos con nombre; Entonces, ¿qué está haciendo allí?

Respuesta

10

<cfset result = obj.func(arg:value,thing:42) /> Miré a esto y fui abrir y cerrar, abrir y cerrar ... Eso no puede ser cierto! ¡No puede usar dos puntos para los argumentos nombrados ! Er, ¿puedes? Bueno, aparentemente puedes.

http://corfield.org/blog/post.cfm/Learn_something_new_every_day_named_arguments

+0

¿Quién no puede creerlo, usted o Sean? ;) – Leigh

+0

Yipes, ¿ese es en realidad el estilo "quote" en SO? Es casi indistinguible del texto normal:/No es de extrañar que parpadeé dos veces ... – Leigh

+0

@Leigh, creo que su LCD tiene algunos problemas de calibración de color: D - en una de mis computadoras portátiles también me resulta difícil ver el color de fondo. – Mohamad

-1

Parece un error tipográfico para mí. En ColdFusion usaría un signo de igual (=), no dos puntos para los argumentos con nombre usados.

Su ejemplo se convertiría en:

weather.subscribe(observer = application.observers.currentConditions); 
+0

@Sean Coyne, no creo que sea un error tipográfico. Hubo varios ejemplos que utilizaron el mismo formato, y alguien comentó que era algo genial (que los dos puntos funcionan). Lo que intento entender es qué significa la sintaxis. ¿Es solo otra forma de decir 'arg = myValue'? – Mohamad

+1

He visto el colon trabajar para el nombre arg en CF, pero sí, = es lo que todos usan. – Henry

+0

@Henry, entonces es solo otra manera de decir 'doSomething (myArg = myValue)'? – Mohamad

0

Sí, se le permite utilizar ambos. Creo que es una cuestión de preferencia. Incluso puedes mezclar.

Intenta lo siguiente y, burlado un poco de función de prueba:

<cffunction name="testFunction" returntype="void" hint="I just spit out the arguments I get"> 
    <cfdump var="#arguments#" label="arguments"> 
</cffunction> 

<cfset testFunction(arg1:"hello",arg2:"world") /> 
<cfset testFunction(arg1="hello",arg2="world") /> 
<cfset testFunction(arg1:"I can mix",arg2="my named argument syntax") /> 

Personalmente, prefiero = de argumentos con nombre. También puede observar que si usa IntelliJ IDEA para su desarrollo ColdFusion no reconoce la sintaxis de los dos puntos, por lo que para un mejor análisis desearía usar la sintaxis =. No puedo hablar por otros IDEs

+0

CFEclipse no tiene el mismo error que IntelliJ IDEA, y dudo que CFBuilder lo haga. –

Cuestiones relacionadas