3

在 JavaScript 中,您可以这样做:

var a = null;
var b = "I'm a value";
var c = null;
var result = a || b || c;

并且 'result' 将获得 'b' 的值,因为 JavaScript 短路了 'or' 运算符。

我想要一个单行习语在 ColdFusion 中做到这一点,我能想到的最好的方法是:

<cfif LEN(c) GT 0><cfset result=c></cfif>
<cfif LEN(b) GT 0><cfset result=b></cfif>
<cfif LEN(a) GT 0><cfset result=a></cfif>

谁能做得比这更好?

4

2 回答 2

8

ColdFusion 没有空值。

您的示例基于哪个项目是空字符串的选择。

如果这就是您所追求的,并且所有其他值都是简单值,您可以这样做:

<cfset result = ListFirst( "#a#,#b#,#c#" )/>

(这是因为标准列表函数忽略了空元素。)

于 2008-09-30T23:10:05.923 回答
1

注意:其他 CFML 引擎确实支持空值。

如果我们真的在处理空值(而不是空字符串),这里有一个适用于 Railo 和 OpenBlueDragon 的函数:

<cffunction name="FirstNotNull" returntype="any" output="false">
    <cfset var i = 0/>
    <cfloop index="i" from="1" to="#ArrayLen(Arguments)#">
        <cfif NOT isNull(Arguments[i]) >
            <cfreturn Arguments[i] />
        </cfif>
    </cfloop>
</cffunction>

那么函数的使用就这么简单:

<cfset result = FirstNotNull( a , b , c ) />
于 2008-09-30T23:19:13.343 回答