2009-04-21 6 views

Répondre

35

Pour tester l'existence clé, je recommande:

<cfif StructKeyExists(MyStruct, "mittens")> 

<!--- or ---> 

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

Dans les coulisses de cette appelle la méthode containsKey() du java.util. map la structure ColdFusion est basée sur. C'est sans doute la méthode la plus rapide pour savoir si une clé existe.

L'alternative est:

<cfif IsDefined("MyStruct.mittens")> 

<!--- or ---> 

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

Dans les coulisses ce qui appelle Eval() sur la chaîne passée (ou alors je crois) et vous indique si le résultat est une référence variable. En comparaison, c'est plus lent que StructKeyExists(). Sur le plan positif: Vous pouvez tester une sous-clé dans une structure imbriquée dans un appel:

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

trouvé la réponse here

Il est StructKeyExists

+0

IsDefined fonctionnerait aussi bien, mais il est plus lent. – Tomalak

+2

La raison IsDefined ne fonctionnait pas pour vous car les doubles guillemets manquants étaient typés. Au lieu de chercher la clé de struct 'mittens', elle essayait de déréférencer la clé des mitaines pour voir si elle existait. Voilà pourquoi vous receviez toujours l'erreur –

Questions connexes