Как мне проверить, существует ли переменная в структуре ColdFusion? - PullRequest
9 голосов
/ 21 апреля 2009

Я бы хотел проверить:

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

Если ключ "варежки" не существует в MyStruct, что он вернет? 0 или "" ??

Что должно заменить функцию Exists?

UPDATE

Я пытался,

<cfif IsDefined(MyStruct.mittens)>

Что также выдает ошибку

Элемент варежки не определен в MyStruct.

Ответы [ 2 ]

35 голосов
/ 21 апреля 2009

Чтобы проверить наличие ключа, я рекомендую:

<cfif StructKeyExists(MyStruct, "mittens")>

<!--- or --->

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

За кулисами это вызывает метод containsKey() файла java.util.map, на котором основана структура ColdFusion. Возможно, это самый быстрый способ выяснить, существует ли ключ.

Альтернатива:

<cfif IsDefined("MyStruct.mittens")>

<!--- or --->

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

За кулисами это вызывает Eval() для переданной строки (или, как я полагаю) и сообщает вам, является ли результат ссылкой на переменную. По сравнению это медленнее, чем StructKeyExists(). С положительной стороны: вы можете проверить вложенный ключ во вложенной структуре за один вызов:

<cfif IsDefined("MyStruct.with.some.deeply.nested.key")>
2 голосов
/ 21 апреля 2009

Нашел ответ здесь

Это StructKeyExists

...