我收到一个错误消息“发现无效的CFML构造”
iif(stImages[id][1]["seolink"] is not "", stImages[id][1]["seolink"], stImages[id][1]["url"]) />我在这里做错了什么?
发布于 2011-10-07 17:36:47
尝试:
iif(stImages[id][1]["seolink"] is not "", DE(stImages[id][1]["seolink"]), DE(stImages[id][1]["url"])) />发布于 2011-10-12 06:19:38
对于那些在家玩游戏的读者来说(可以说是这样),IIF可能是一头难以驾驭的野兽,因为它确实存在双重评价。所以
#IIF(myVal EQ "", "thisThing", "thatThing")#看起来它只是返回第一个或第二个字符串,但实际上它将返回变量"thisThing“或"thatThing”的内容(或者抛出一个错误,说明它们不存在)。所以跟我说:"IIF()和DE()就像互惠的寄生生命一样。“"DE“,如”延迟评估“。因此,如果希望上面的语句返回第一个或第二个字符串,则需要:
#IIF(myVal EQ "", DE("thisThing"), DE("thatThing"))#现在,您当然可以使用此功能对一个字段进行两次求值,而不使用"DE()",但这意味着您正在使用某种动态变量名,可以说这样做并不是最佳实践。并不是说我没有做过这样的事情,但是它应该得到大量的评论,因为如果你不这样做,在你之后维护代码的人可能会想要杀了你。
顺便说一下,"DE()“并不神秘。这两个语句是等价的:
#DE("thisThing")#
#"""thisThing"""#看到怎么回事了吗?"DE()“只是用双引号将某些东西引起来。因此,一组引号在第一次求值时被“剥离”,然后被引号的字符串从函数中返回。干净得像泥一样?
明白人们为什么不喜欢IIF了吗?它在某些情况下非常方便,但它是一个上下文混乱,并有助于代码,使人们去"HWUUUH??“这就是为什么人们说,如果可能的话,尽量避免使用它。
发布于 2011-10-07 19:13:46
如果你能做到的话我会尽量避免,
iif(stImagesid“搜索链接”不是"",DE(stImagesid“搜索链接”),DE(stImagesid"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"]# />https://stackoverflow.com/questions/7685315
复制相似问题