की Shapeless Features Overview Monomorphism` उदाहरण निम्न उदाहरण दिखाता है:समझौता `निराकार
import poly._
// choose is a function from Sets to Options with no type specific cases
object choose extends (Set ~> Option) {
def apply[T](s : Set[T]) = s.headOption
}
scala> choose(Set(1, 2, 3))
res0: Option[Int] = Some(1)
scala> choose(Set('a', 'b', 'c'))
res1: Option[Char] = Some(a)
हालांकि, मैं नहीं करते हैं, निराकार के साथ अनुभव के मीटर अभाव में, निम्नलिखित कि और के बीच अंतर समझना:
scala> def f[T](set: Set[T]): Option[T] = set.headOption
f: [T](set: Set[T])Option[T]
scala> f(Set(1,2,3))
res0: Option[Int] = Some(1)
scala> f(Set('a', 'b', 'c'))
res1: Option[Char] = Some(a)
स्पष्टीकरण के लिए धन्यवाद। Walkthrough में अगला उदाहरण, 'pairApply', भी एक अच्छा उदाहरण है। कृपया मुझे बताएं, 'def'' को 'def' के माध्यम से फ़ंक्शन के रूप में लिखा जा सकता है? मैं उत्सुक हूं कि 'ऑब्जेक्ट ...' दृष्टिकोण क्यों लिया गया था। –
'select' किसी ऑब्जेक्ट पर * विधि * के रूप में लिखा जा सकता है, लेकिन यह * फ़ंक्शन * (ए * मान * प्रकार' फंक्शन 1') नहीं हो सकता है। इसे 'ऑब्जेक्ट' के रूप में रखने का लाभ यह है कि आप इसे सामान्यता को खोए बिना किसी अन्य फ़ंक्शन में पास कर सकते हैं: 'def लागू करें टॉइन्ट्स एंडस्ट्रिंग्स (मैपर: सेट ~> विकल्प): (विकल्प [Int], विकल्प [स्ट्रिंग]) = (मैपर (सेट (1, 2), मैपर (सेट ("हैलो"))) ') और फिर हम' applyToIntsAndStrings (चुनें) 'को कॉल कर सकते हैं। आप इसे सामान्य 'डीफ़' के साथ नहीं कर सकते हैं। – lmm