2017-07-04 13 views
5

मैं कैसे में लैम्ब्डा अभिव्यक्ति के रूप में वैकल्पिक पैरामीटर पारित कर सकते हैं Kotlin भाषावैकल्पिक पैरामीटर के रूप में kotlin लैम्ब्डा भाव

val max = { a: Int, b: Int -> 
    if (a > b) 
     a 
    else 
     b 
} 

मैं बात ऊपर पास करना वैकल्पिक पैरामीटर की तरह है

+1

आप इस लैम्ब्डा को क्या पास करना चाहते हैं? – zsmb13

+0

साइड नोट, जेडीके में पहले से ही 'अधिकतम' फ़ंक्शन उपलब्ध है, जो 'Math.max (a, b)' के माध्यम से सुलभ है, जो वही काम करता है। – Robin

+0

हालांकि, आपके प्रश्न के बारे में, मैं वास्तव में समझ नहीं पा रहा हूं कि आप क्या पूछ रहे हैं - आप 'अधिकतम' को किसी भी फ़ंक्शन कॉल के सामान्य तर्क के रूप में पास कर सकते हैं जो ''Int, Int) -> Int' के फ़ंक्शन को लेता है। – Robin

उत्तर

0

आप उपयोग कर सकते हैं अपने max डिफ़ॉल्ट के रूप में कार्य

fun someDefault(f: (a: Int, b: Int) -> Int = max) { 
    f(1, 7) 
    // do something 
} 

या आप भी जो वैकल्पिक

fun someOptional(f: ((a: Int, b: Int) -> Int)? = null) { 
    f?.invoke(1, 7) 
} 

दोनों ही मामलों में है पैरामीटर के रूप में लैम्ब्डा (डिफ़ॉल्ट और वैकल्पिक) के साथ एक विधि को परिभाषित कर सकते हैं कॉल के लिए एक लैम्ब्डा निर्दिष्ट कर सकते हैं या आप इसे

fun call() { 
    someDefault() 
    someDefault { a, b -> a * b} 

    someOptional() 
    someOptional { a, b -> a * b} 
} 
5
छोड़ सकते हैं

निम्नलिखित फ़ंक्शन को परिभाषित करता है जो फ़ंक्शन स्वीकार करता है, और यदि कोई भी आपूर्ति नहीं की जाती है तो पास किए गए फ़ंक्शन के लिए डिफ़ॉल्ट मान निर्दिष्ट करता है।

fun foobar(fn: (a: Int, b: Int) -> Int = { a: Int, b: Int -> if (a > b) a else b }) { 
    println(fn(42, 99)) 
} 

आप अपनी खुद की कार्यों पारित कर सकते हैं:

val min = { a: Int, b: Int -> if (a <= b) a else b } 
foobar(min) 

val max = { a: Int, b: Int -> if (a > b) a else b } 
foobar(max) 

आप समारोह को छोड़ सकते हैं और सामान्य का प्रयोग:

foobar() 

वैकल्पिक रूप से आप के रूप में मानक पुस्तकालय maxOf समारोह का उल्लेख कर सकते डिफ़ॉल्ट, अपना खुद का लिखने के बजाय:

fun foobar(fn: (a: Int, b: Int) -> Int = ::maxOf) { 
    println(fn(42, 99)) 
} 
संबंधित मुद्दे