有没有办法在一个优雅的代码行中编写这个逻辑?
<cfif ThumbnailWidth EQ 0>
<cfset Width = 75>
<cfelse>
<cfset Width = ThumbnailWidth>
</cfif>
答案 0 :(得分:28)
Coldfusion 9:
<!--- Syntax: ((condition) ? trueStatement : falseStatement) --->
<cfset width = ((ThumbnailWidth EQ 0) ? 75 : ThumbnailWidth) />
Coldfusion 8及以下:
<!--- Syntax: IIf(condition, trueStatement, falseStatement) --->
<cfset width = IIf((ThumbnailWidth EQ 0), 75, ThumbnailWidth) />
有人会说出于性能原因应避免使用IIf()。在这个简单的情况下,我相信你会发现没有区别。 Ben Nadel的博客有more discussion on IIF() performance和the new ternary operator in CF 9。
答案 1 :(得分:6)
我发现你的原始足够优雅 - 讲述故事,易于阅读。但这绝对是个人偏好。幸运的是,在CFML中总是至少有九种方法可以做任何事情。
你可以将它放在一行(CFML没有行尾要求):
<cfif ThumbnailWidth EQ 0><cfset Width = 75><cfelse><cfset Width = ThumbnailWidth></cfif>
你也可以使用IIF() Function - 它会起作用:
<cfset Width = IIf(ThumbnailWidth EQ 0, 75, ThumbnailWidth)>
这个结构有点奇怪' - 我觉得更清楚。 IIF()的强度在于它也可以在线使用(毕竟它是一个函数)。例如:
<img src="#ImageName#" width="#IIf(ThumbnailWidth EQ 0, 75, ThumbnailWidth)#">
最后一种形式通常用于在注入动态代码时保持干净(错误)的HTML布局。
答案 2 :(得分:2)
cfscript
,例如:
<cfscript>width = (ThumbnailWidth == 0) ? 75 : ThumbnailWidth;</cfscript>
尚未测试此代码,但它应该可以正常工作。
答案 3 :(得分:2)
如果您正在寻找简洁的代码,那么您可以比其他示例更进一步,利用CF对非零值的评估为true
:
<!--- CF 9 example --->
<cfset width = ThumbnailWidth ? ThumbnailWidth : 75>
<!--- CF 8 and below --->
<cfset width = iif(ThumbnailWidth, ThumbnailWidth, 0)>
当然,你会牺牲一点清晰度,但这是更紧凑代码的权衡。
答案 4 :(得分:1)
我个人更喜欢这样的内容:
<cfscript>
Width = ThumbnailWidth;
if(NOT Val(Width)) // if the Width is zero, reset it to the default width.
Width = 75;
</cfscript>