3

JavaScriptでは、次のことができます。

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

また、JavaScriptは'または'演算子を短絡するため、'result'は'b'の値を取得します。

この1行のイディオムで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 エンジンは null をサポートしています。

実際にヌル (空の文字列ではない) を扱っている場合は、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 に答える