मैं scalaz
|>
ऑपरेटर का उपयोग कर सकता हूं जब मैं फ़ंक्शन और ऑब्जेक्ट को स्विच करना चाहता हूं, इसलिए थोड़ा और अधिक पढ़ने योग्यता प्राप्त हो सकती है। मुझे आपको एक मॉडल फ़ंक्शन पेश करने दें: स्केलज़ के साथ स्विच फ़ंक्शन और ऑब्जेक्ट '|>
def length2(x:String) = x.length * 2
अब, मैं इसे दोनों तरीकों से लिख सकता हूं:
"aoeu" |> length2
length2("aoeu")
लेकिन यदि मैं इस फ़ंक्शन को अधिक सामान्य बना देता हूं, तो यह काम करना बंद कर देता है।
def length2(x:SeqLike[_
,_
]) = x.length * 2
length2("aoeu") // ok
"aoeu" |> length2 // doesn't work
क्यों संकलक इसे समझ में नहीं आता है?
SeqLike
विशेषता में कुछ वर्ग मिश्रण के लिए
String
से निश्चित रूप से एक अंतर्निहित रूपांतरण है।
ट्रिकी। सबसे पहले मैंने सोचा था कि ऐसा इसलिए है क्योंकि आप एक समय में केवल एक निहित हो सकते हैं, लेकिन अब ऐसा लगता है कि यह कहीं भी एक भिन्नता मुद्दा हो सकता है ... – Debilski
@ डेबिलस्की, मुझे यकीन नहीं है कि '|>' को स्केलज़ में परिभाषित किया गया है, लेकिन जब मैंने अपना खुद का परिभाषित करने की कोशिश की, मुझे लगता है कि "केवल एक निहित नियम" इसे लागू करने से रोका गया है: "एओयू" को '|>' विधि के साथ कक्षा में रूपांतरित करने की आवश्यकता होगी और फिर फिर से 'सेक्लाइक' तक। – huynhjl
त्रुटि संदेश दिखाएं। स्कालज़ में आसानी से उपलब्ध नहीं है, लेकिन त्रुटि संदेश आमतौर पर बताते हैं कि क्या गलत हो रहा है। –