Coldfusion IIF error - найдена неверная конструкция CFML - PullRequest
1 голос
/ 07 октября 2011

Я получаю сообщение об ошибке "Обнаружена неверная конструкция CFML"

iif(stImages[id][1]["seolink"] is not "", stImages[id][1]["seolink"], stImages[id][1]["url"]) />

что я тут делаю не так?

Ответы [ 3 ]

4 голосов
/ 07 октября 2011

Попробуйте:

iif(stImages[id][1]["seolink"] is not "", DE(stImages[id][1]["seolink"]), DE(stImages[id][1]["url"])) />
2 голосов
/ 12 октября 2011

Для тех читателей, которые играют дома (как бы), ИИФ может быть неуправляемым зверем из-за двойной оценки, которую он делает.Таким образом,

#IIF(myVal EQ "", "thisThing", "thatThing")#

выглядит так, как будто он просто возвращает первую или вторую строку, но на самом деле он возвращает содержимое переменных (thisThing) или «thatThing» (или выдает ошибку, которую они не делаютсуществовать).Так скажи это со мной: «IIF () и DE () идут вместе, как взаимовыгодные паразитические образы жизни».«DE» как в «Отложенной оценке».Поэтому, если вы хотите, чтобы приведенный выше оператор возвращал первую или вторую строку, вам необходимо:

#IIF(myVal EQ "", DE("thisThing"), DE("thatThing"))#

Теперь вы, безусловно, можете использовать эту функцию для оценки поля дважды и НЕ использовать «DE ()», ноэто означает, что вы используете какое-то имя динамической переменной, и можно утверждать, что это не лучшая практика.Не то чтобы я не сделал именно эту вещь, но это следует обильно прокомментировать, потому что если вы не тот человек, который поддерживает код после того, как вы, вероятно, захотите убить вас.

Кстати, естьнет загадки для "DE ()".Эти два утверждения эквивалентны:

#DE("thisThing")#
#"""thisThing"""#

Видите, что происходит?«DE ()» просто помещает двойные кавычки вокруг чего-либо.Таким образом, один набор кавычек «удаляется» при первой оценке, а затем строка в кавычках возвращается из функции.Ясно, как грязь?

Видишь, почему людям не нравится ИИФ?Это очень удобно в определенных ситуациях, но это контекстный беспорядок и способствует коду, который заставляет людей идти "HWUUUH ??"Вот почему люди говорят, чтобы избежать этого, если это возможно.

2 голосов
/ 07 октября 2011

Я бы избегал iif, где вы можете,

iif (stImages [id] [1] ["seolink"] - это не "", DE (stImages [id] [1] ["seolink"]), DE (stImages [id] [1] ["url"])) />

<cfif stImages[id][1]["seolink"] is not "">#stImages[id][1]["seolink"]#<cfelse>#stImages[id][1]["url"]#</cfif>

или если у вас ColdFusion 9

<cfset stImages[id][1]["seolink"] is not "" ? #stImages[id][1]["seolink"]# : #stImages[id][1]["url"]# />
...