कंपाइलर infix + जेनेरिक तरीकों को स्वीकार करते हैं, लेकिन इसका उपयोग करने के लिए वाक्यविन्यास क्या है? उदाहरण के लिए, उन 2 समान तरीकों को देखते हुए (सापेक्ष मनमाने ढंग से सामान्य प्रकार):क्या हम कोटलिन में इंफिक्स जेनेरिक तरीकों का उपयोग कर सकते हैं?
infix inline fun Int1.plus1(i: Int1) = Int1(this.value + i.value)
infix inline fun <U> Int1.plus2(i: Int1) = Int1(this.value + i.value)
मैं लिख सकते हैं:
Int1(3).plus1(Int1(4))
Int1(3) plus1 Int1(4)
Int1(3).plus2<Int>(Int1(4))
लेकिन यह कॉल अमान्य है:
Int1(3) plus2<Int> Int1(4)
मुझे किसी ने समझा सकता क्यूं कर ?
लेकिन कहता है कि आपके पास कक्षा 'Int2' है जो 'Int1' तक फैली हुई है। फिर आपके पास यह फ़ंक्शन है: 'इन्फिक्स इनलाइन मजेदार यू.प्रिंट (i: Int) = println ("$ {U :: class} $ i") '। यदि आप 'यू' 'इंट 1' होना चाहते हैं, तो आप इसे इस तरह कॉल कर सकते हैं:' Int2 (5)। प्रिंट (4) '। क्या इन्फिक्स नोटेशन का उपयोग करके यह कॉल करना संभव है? –
marstran
@marstran हां, आपको अपेक्षित प्रकार 'Int2 (5) प्रिंट 4.to (Int1 :: class)' –
पर यह तर्क नहीं डालना है कि यह काम नहीं करता है। यह तर्क एक सामान्य 'Int' है। यह प्रकार 'यू' का रिसीवर है जो समस्या है। क्या मुझे इसके बजाय इसे कास्ट करना होगा? थोड़ा अजीब लगता है कि इंफिक्स कार्यों से निपटने के दौरान मुझे केवल एक कास्ट का उपयोग करना होगा। – marstran