2009-08-19 21 views
10

Esiste una sintassi "breve" per la creazione di una struttura in ColdFusion? Mi piacerebbe sostituire questo codice verbose:ColdFusion ha una sintassi breve per la creazione di una struct?

<cfscript> 
    ref = StructNew(); 
    ref.Template = "Label"; 
    ref.Language = "en"; 
    stcML = GetPrompts(ref); 
</cfscript> 

con qualcosa di più simile a un oggetto JavaScript:

<cfscript> 
    stcML = GetPrompts({ Template: "Label", Language: "en" }); 
</cfscript> 

C'è qualcosa di simile?

risposta

16

ColdFusion 8 (in su) ha una struttura di notazione letterale:

<cfset objData = { 
    Key1 = "Value1", 
    Key2 = "Value2" 
} /> 

Tuttavia, ci sono alcune stringhe allegato:

Nota: ColdFusion 9 fissa gli errori sopra delineati, quindi con qualsiasi versione CF disponibili al giorno d'oggi si andrà bene. Sto ancora lasciando nei link per riferimento.

+0

quindi in pratica puoi usare quella sintassi breve per creare una struttura 1-dimensionale che viene assegnata a una variabile. ma non puoi crearne uno per passare a una funzione al volo come volevo. Immagino che sia più simile ad alcune * catene * allegate ... – Kip

+0

suoni come questo saranno comunque risolti in CF9! – Kip

+0

Sì, "catene" potrebbe essere più preciso. Inserirò i letterali struct CF8 sotto "un giorno di ritardo e un dollaro in meno".Non sono sicuro del motivo per cui l'hanno tirato fuori - nella sua forma attuale, non ha molto senso. – Tomalak

2

In ColdFusion 8 e, soprattutto, è possibile creare una struttura come questa:

ref={template="label", language="en"} 
+2

Kip, in CF8 è possibile utilizzare questa sintassi, come dice Sam, ma non è possibile utilizzarla negli argomenti delle funzioni. In CF9, puoi usare la notazione della stenografia struct in argomenti a funzioni; quindi, il tuo esempio precedente funzionerebbe (con = invece di: sebbene) –

3

In Railo 3 e superiore si crea in questo modo:

  • Struct: struct (a: 1, b: 2, c: 3, d: "aaa")
  • Array: array (1 , 2,3, "AAA")
  • Query: query (col1: array (1.1,1.2,1,3), col2: array (2.1,2.2,2,3))
+0

A tutti quelli che sono stati possibili da Railo 1. –

1

Si potrebbe utilizzare cfjson. Aggiungere il componente a un ambito che si sta utilizzando (ad esempio, la portata richiesta):

<cfobject name="request.json" component="cfc.json"> 

e chiamarlo come:

<cfset aStructure = request.json.decode('{ Template: "Label", Language: "en" }')> 
5

Se i tentativi di semplificare la sintassi struct in CF8 incorrere in nidificazione e/o carenze in linea è possibile utilizzare questa funzione apparentemente semplice:

<cfscript> 
    function nStruct(){ 
     return arguments; 
    } 
</cfscript> 

È quindi possibile utilizzare la seguente sintassi:

<cfdump var="#nStruct(
    a=1, 
    b=nStruct(
     c=2,d=3 
    ) 
)#" /> 
+0

Ho chiamato il mio 'array()' cuz che è come funziona in PHP;) –

Problemi correlati