मेरे पास एक साधारण फैक्ट्री पैटर्न है जहां कार्यान्वयन ओवरलोड रिज़ॉल्यूशन के माध्यम से निर्धारित किया जाता है। समस्या यह है कि कोटलिन कंपाइलर इनलाइन लैम्ब्डा के लिए "ओवरलोड रिज़ॉल्यूशन अस्पष्टता .." के साथ शिकायत करता है।कोटलिन: इनलाइन लैम्ब्डा और ओवरलोड रिज़ॉल्यूशन अस्पष्टता
class Foo(){
companion object Factory {
fun create(x: Int, f: (Int) -> Double) = 2.0
fun create(x: Int, f: (Int) -> Int) = 1
}
}
fun main(args:Array<String>){
val a = Foo.create(1,::fromDouble) //OK
val b = Foo.create(1,::fromInt) //OK
val ambiguous = Foo.create(1){i -> 1.0} //Overload resolution ambiguity?
}
fun fromDouble(int:Int) = 1.0
fun fromInt(int:Int) = 1
कोटलिन कंपाइलर ओवरलोड रिज़ॉल्यूशन को कैसे हल करता है और इनलाइन लैम्ब्डा को अस्पष्ट क्यों माना जाता है?
यह एक बग प्रतीत होता है, क्योंकि अगर मैंने लैम्ब्डा को '{i: Int -> 1.0} के रूप में (int) -> डबल' की तरह अस्पष्टता नहीं दी है, लेकिन यह कहता है कि कास्ट की आवश्यकता नहीं है। इसके अलावा, अगर मैं लैम्ब्डा को 'वैल एल = {i: Int -> 1.0}' में निकालता हूं और इसका उपयोग करता हूं, तो फिर कोई अस्पष्टता नहीं होती है। कृपया इस समस्या के लिए बग ट्रैकर खोजें और यदि यह वहां कोई नया फ़ाइल नहीं है: https://youtrack.jetbrains.com/issues/KT – hotkey
एक और दिलचस्प बात यह है कि अगर आप लैम्ब्डा को @hotkey के रूप में डालते हैं, तो आईडीई बताएगा आप यह जरूरी नहीं है कि यह आवश्यक नहीं है। लेकिन जिस क्षण आप इसे हटाते हैं, वह अस्पष्टता के बारे में शिकायत करता है। –
इनपुट के लिए धन्यवाद! यह पता चला कि यह शायद एक बग था। Https://youtrack.jetbrains.com/issue/KT-11265 –