3
ฉันจะใช้รูปแบบการเพิ่มคุณค่า - ห้องสมุดของฉันกับคอลเลกชัน Scala ได้อย่างไร
หนึ่งในรูปแบบที่มีประสิทธิภาพมากที่สุดที่มีอยู่ในสกาลาเป็นประเทือง-ห้องสมุดของฉันรูปแบบ * ซึ่งใช้แปลงโดยปริยายที่จะปรากฏขึ้นเพื่อเพิ่มวิธีการเรียนที่มีอยู่โดยไม่ต้องมีความละเอียดวิธีการแบบไดนามิก ตัวอย่างเช่นหากเราต้องการให้สตริงทั้งหมดมีวิธีการspacesนับจำนวนอักขระที่มีช่องว่างเราสามารถ: class SpaceCounter(s: String) { def spaces = s.count(_.isWhitespace) } implicit def string_counts_spaces(s: String) = new SpaceCounter(s) scala> "How many spaces do I have?".spaces res1: Int = 5 น่าเสียดายที่รูปแบบนี้ประสบปัญหาเมื่อจัดการกับคอลเลกชันทั่วไป ยกตัวอย่างเช่นจำนวนของคำถามที่ได้รับการถามเกี่ยวกับการจัดกลุ่มรายการตามลำดับกับคอลเลกชัน ไม่มีสิ่งใดในตัวที่ใช้งานได้ในช็อตเดียวดังนั้นสิ่งนี้จึงเป็นตัวเลือกที่เหมาะสำหรับรูปแบบการเติมเต็มห้องสมุดของฉันโดยใช้คอลเลกชันทั่วไปCและประเภทองค์ประกอบทั่วไปA: class SequentiallyGroupingCollection[A, C[A] <: Seq[A]](ca: C[A]) { def groupIdentical: C[C[A]] = { if (ca.isEmpty) C.empty[C[A]] else …