2009-04-21 4 views
8

Ich würde testen mag:Wie kann ich testen, ob eine Variable in einer ColdFusion-Struktur vorhanden ist?

<cfif Exists(MyStruct["mittens"])> 
</cfif> 

Wenn die „Fäustlinge“ Schlüssel in MyStruct nicht vorhanden ist, was wird es zurückgeben? 0 oder "" ??

Was sollte die Exists-Funktion ersetzen?

UPDATE

Ich habe versucht,

<cfif IsDefined(MyStruct.mittens)> 

Welche auch den Fehler wirft

Element Fäustlinge in MyStruct nicht definiert ist.

Antwort

35

für Schlüssel Existenz Um zu testen, empfehle ich:

<cfif StructKeyExists(MyStruct, "mittens")> 

<!--- or ---> 

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

Hinter den Kulissen dieser ruft die containsKey() Methode des java.util. Zuordnen der ColdFusion-Struktur basiert auf. Dies ist wohl die schnellste Methode, um herauszufinden, ob ein Schlüssel existiert.

Die Alternative ist:

<cfif IsDefined("MyStruct.mittens")> 

<!--- or ---> 

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

Hinter den Kulissen dieses Eval() auf dem übergebenen String-Anrufe (oder ich glaube, so) und sagt Ihnen, ob das Ergebnis eine variable Referenz. Im Vergleich dazu ist dies langsamer als StructKeyExists(). Auf der positiven Seite: Sie können für einen Unterschlüssel in einer verschachtelten Struktur in einem Anruf testen:

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

die Antwort gefunden here

Es ist StructKeyExists

+0

IsDefined würde auch funktionieren, aber es ist langsamer. – Tomalak

+2

Der Grund, warum IsDefined für Sie nicht funktionierte, waren die fehlenden Anführungszeichen. Anstatt nach dem "Fäustling" -Struct-Schlüssel zu suchen, versuchte er, den Fäustling-Schlüssel zu dereferenzieren, um zu sehen, ob die Existenz vorhanden ist. Deshalb haben Sie immer noch den Fehler erhalten –

Verwandte Themen