कहते हैं कि हम minBy
कि एक संग्रह में बराबर अतिसूक्ष्मवाद के सभी तत्वों को रिटर्न की तरह एक समारोह बनाना चाहते में मूल संग्रह प्रकार रिटर्निंग हमारे शुरुआती List
के बजाय।सामान्य विधि
तो मैं आशा में
def multiMinBy[A, B: Ordering, C <: Traversable[A]](xs: C)(f: A => B)
के हस्ताक्षर को बदलने मैं एक C
मिल सकता है वापस बल्कि एक Traversable[A]
से कोशिश की। हालांकि, मैं कुछ भी वापस नहीं मिलता है:
scala> multiMinBy(List("zza","zzza","zzb","zzzb"))(_.last)
<console>:9: error: inferred type arguments [Nothing,Nothing,List[java.lang.String]]
do not conform to method multiMinBy's type parameter bounds [A,B,C <: Traversable[A]]
मुझे लगता है कि इस वजह से हम C
बहस में प्रदर्शित होने से पहले A
inferred किया गया है? तो मैं बहस के क्रम फ़्लिप, और एक डाली कहा:
def multiMinBy[A, B: Ordering, C <: Traversable[A]](f: A => B)(xs: C) = {
val minVal = f(xs minBy f)
(xs filter (f(_) == minVal)).asInstanceOf[C]
}
जो, काम करता है को छोड़कर हम इसे इस तरह कॉल करनी होगी:
multiMinBy((x: String) => x.last)(List("zza","zzza","zzb","zzzb"))
वहाँ एक रास्ता मूल वाक्य रचना बनाए रखने के लिए है, सही संग्रह प्रकार वापस प्राप्त करते समय?
हां, मैं मानता हूं, यह मेरा से बेहतर समाधान है। –