5

के बाद,स्कैला में एक या कोई भी परिवर्तनीय तर्क कैसे पास करें?

def test(args: Any*) = args.size 

मैं खाली तर्क सूची स्थिति के आधार पर से कॉल करने की है, लेकिन अगर/किसी और से बचने के लिए चाहते हैं।

test(List("one").filter(_ => condition) : _*) 

वहाँ इस से बेहतर तरीका है:

मैं इस समाधान के साथ बाहर आ गए?

अधिक संदर्भ के लिए, मैं प्ले 2.0 स्केला के साथ खेल रहा हूँ, और यह है:

user => Redirect(routes.Application.index).withSession("username" -> user._1).withCookies(
    List(Cookie("rememberme", Crypto.sign(user._1) + "-" + user._1)).filter(_ => user._3) : _*) 

जहां user._3 rembemberme बूलियन है।

मैं सत्र के साथ कॉल नहीं करना चाहता हूं या इसे खाली तर्क सूची (कुकी को तत्काल नहीं करने के लिए) के साथ कॉल करना चाहूंगा यदि याद रखना गलत है, स्केल तरीके से।

धन्यवाद।

उत्तर

7

मैं इस मामले को एम्बेड एक if/else साफ समाधान है में लगता है:

test((if (condition) Seq("one") else Seq.empty) : _*) 
+0

धन्यवाद, मैं मानता हूँ यह साफ है, और मैं वास्तव में नहीं था अगर/अन्य से बचने के लिए चाहते हैं, लेकिन तत्काल सूची से बचें, तो मुझे बस Seq.empty या Nil याद आ रही थी, इसलिए दूसरा जवाब भी उपयोगी है :) – avalez

+1

@alavez यदि आपका उद्देश्य किसी सूची को तत्काल से बचाना था, तो यह एक बड़ी असफलता है, क्योंकि यह वही है जो 'सेक' करता है! आप कुकीज को 'वैल टी' से पहले भाग निर्दिष्ट करके इसे टालना चाहते हैं, फिर 'if (user._3) t.withCookies (...) और अन्य t.withCookies() 'को कॉल कर रहे हैं। अस्थायी चर अच्छे हैं! –

+0

आपकी टिप्पणी के लिए धन्यवाद। क्या मैं सही सोच रहा हूं कि नील का उपयोग तत्काल सूची से बच जाएगा? और सिर्फ बेहतर समझने के लिए, Seq.empty किसी भी तरह से नील से बेहतर या बदतर है? – avalez

3

सूची फ़िल्टर का उपयोग करते समय निश्चित रूप से काम करता है, यह यहां अनुपयुक्त लगता है क्योंकि आप या तो पूरी सूची या खाली सूची चाहते हैं और सूची सदस्यों पर पुन: प्रयास करने की आवश्यकता नहीं है।

तुम सच में अगर/नहीं, तो आप एक Option[List[Any]] में सूची लपेट और विकल्प के filter और getOrElse तरीकों का उपयोग कर सकता है

test(Some(List("one")).filter{_ => condition}.getOrElse(Nil): _*) 

तुम भी match, जो इस मामले में के बराबर है इस्तेमाल कर सकते हैं बचना चाहते हैं यदि/बाकी

test((condition match {case true => List("one"); case _ => Nil}) : _*) 
+0

तो मैं के साथ समाप्त हो गया है: परीक्षण ((यदि (हालत) Seq ("एक") और शून्य): _ *) – avalez