Domanda

In JavaScript, puoi farlo:

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

E 'risultato' otterrà il valore di 'b' perché JavaScript mette in corto circuito l'operatore 'o'.

Voglio che un linguaggio a una riga faccia questo in ColdFusion e il meglio che posso inventare è:

<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>

Qualcuno può fare di meglio?

È stato utile?

Soluzione

ColdFusion non ha valori null.

Il tuo esempio si basa sulla scelta su quale elemento è una stringa vuota.

Se questo è ciò che stai cercando e tutti gli altri valori sono valori semplici, puoi farlo:

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

(Funziona perché le funzioni dell'elenco standard ignorano gli elementi vuoti.)

Altri suggerimenti

Nota: altri motori CFML supportano null.

Se abbiamo davvero a che fare con null (e non stringhe vuote), ecco una funzione che funzionerà per Railo e 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>

Quindi usare la funzione è semplice come:

<cfset result = FirstNotNull( a , b , c ) />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top