كولد فيوجن: اختيار أول قيمة غير لاغية من قائمة

StackOverflow https://stackoverflow.com/questions/155435

  •  03-07-2019
  •  | 
  •  

سؤال

في جافا سكريبت، يمكنك القيام بذلك:

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

و'نتيجة' سوف تحصل على قيمة 'ب' لأن جافا سكريبت قصيرة الدوائر و'أو' المشغل.

واريد تعبير سطر واحد للقيام بذلك في كولد فيوجن وأفضل ما يمكن أن تأتي به هو:

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

ويمكن لأي شخص أن يفعل أي أفضل من هذا؟

هل كانت مفيدة؟

المحلول

وليس لديها كولد فيوجن بلا قيم.

والمثال الخاص بك هو إسناد الاختيار على العنصر الذي هو سلسلة فارغة.

وإذا كان هذا هو ما كنت بعد، وكل ما تبذلونه من القيم الأخرى هي قيم بسيطة، يمكنك القيام بذلك:

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

(الذي يعمل لأن وظائف القائمة القياسية تتجاهل العناصر الفارغة).

نصائح أخرى

ملحوظة: محركات 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 ) />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top