2009-04-21 2 views

risposta

35

Per verificare l'esistenza chiave, mi raccomando:

<cfif StructKeyExists(MyStruct, "mittens")> 

<!--- or ---> 

<cfset key = "mittens"> 
<cfif StructKeyExists(MyStruct, key)> 

Dietro le quinte questo chiama il metodo del java.util containsKey(). mappa su cui si basa la struttura di ColdFusion. Questo è probabilmente il metodo più veloce per scoprire se esiste una chiave.

L'alternativa è:

<cfif IsDefined("MyStruct.mittens")> 

<!--- or ---> 

<cfset key = "mittens"> 
<cfif IsDefined("MyStruct.#key#")> 

Dietro le quinte Questo richiede Eval() sulla stringa passata (o almeno così credo) e ti dice se il risultato è un riferimento variabile. In confronto, questo è più lento di StructKeyExists(). Il lato positivo: È possibile verificare una sottochiave in una struttura nidificata in una sola chiamata:

<cfif IsDefined("MyStruct.with.some.deeply.nested.key")> 
2

trovato la risposta here

E 'StructKeyExists

+0

IsDefined funzionerebbe bene, ma è più lento. – Tomalak

+2

La ragione per cui IsDefined non ha funzionato per te è stata la doppia virgolette mancante. Invece di cercare la chiave di struct 'mittens', stava cercando di dereferenziare la chiave dei guanti per verificare l'esistenza. Ecco perché stavi ancora ricevendo l'errore –