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")>
IsDefined funzionerebbe bene, ma è più lento. – Tomalak
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 –