ColdFusion: выбрать первое ненулевое значение из списка - PullRequest
3 голосов
/ 01 октября 2008

В JavaScript вы можете сделать это:

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

И «result» получит значение «b», потому что JavaScript закорачивает оператор «или».

Я хочу, чтобы в 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>

Кто-нибудь может сделать лучше, чем этот?

Ответы [ 2 ]

8 голосов
/ 01 октября 2008

ColdFusion не имеет нулевых значений.

Ваш пример основан на выборе, какой элемент является пустой строкой.

Если это то, что вам нужно, а все остальные значения являются простыми, вы можете сделать это:

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

(что работает, потому что стандартные функции списка игнорируют пустые элементы.)

1 голос
/ 01 октября 2008

Примечание: другие механизмы 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 ) />
...