coldfusion IIF错误 - 找到无效的CFML构造

时间:2011-10-07 09:23:42

标签: coldfusion

我收到错误“找到无效的CFML构造”

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

我在这做错了什么?

3 个答案:

答案 0 :(得分:4)

尝试:

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

答案 1 :(得分:2)

我会尽可能避免使用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"]# />

答案 2 :(得分:2)

对于那些在家里玩游戏的读者(因为它),IIF可能是一个不守规矩的野兽,因为它做了双重评价。所以

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

看起来它只会返回第一个或第二个字符串,但事实上它将返回VARIABLES“thisThing”或“thatThing”的内容(或抛出它们不存在的错误)。所以跟我说吧:“IIF()和DE()一起共同享受各种有益的寄生生活”。 “DE”和“延迟评估”一样。因此,如果您希望上述语句返回第一个或第二个字符串,则需要:

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

现在,您当然可以使用此功能两次评估字段而不使用“DE()”,但这意味着您正在使用某种动态变量名称,并且可以认为这样做不是最佳实践。并不是说我没有做过那么精确的事情,但是应该对它进行大量的评论,因为如果你没有那个维护代码的人可能会想要杀死你。

顺便说一下,“DE()”并不神秘。这两个陈述是等价的:

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

看看发生了什么? “DE()”只是简单地用双引号括起来。因此,一组引号在第一次被评估时被“剥离”,然后从函数返回引用的字符串。像泥一样清楚?

了解为什么人们不喜欢IIF?它在某些情况下非常方便,但它是一个上下文混乱,并有助于代码,使人们去“HWUUUH ??”所以这就是为什么人们会说尽可能避免它。