คำถามติดแท็ก case-class

16
อะไรคือความแตกต่างระหว่างคลาสเคสของสกาล่ากับคลาส?
ฉันค้นหาใน Google เพื่อค้นหาความแตกต่างระหว่างที่และcase class classทุกคนกล่าวว่าเมื่อคุณต้องการจับคู่รูปแบบในคลาสให้ใช้คลาสเคส มิฉะนั้นใช้คลาสและยังกล่าวถึงสิทธิพิเศษบางอย่างเช่นเท่ากับและรหัสแฮชแทนที่ แต่เหตุผลเหล่านี้เป็นเหตุผลเดียวที่ควรใช้คลาสเคสแทนคลาส? ฉันเดาว่าควรมีเหตุผลที่สำคัญมากสำหรับคุณลักษณะนี้ใน Scala คำอธิบายหรือมีแหล่งข้อมูลเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับคลาสเคสสคาลาคืออะไร?

14
วัตถุเคสเทียบกับการแจกแจงใน Scala
มีแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับเวลาใดที่จะใช้คลาสเคส (หรืออ็อบเจ็กต์เคส) เทียบกับการขยายการแจงนับใน Scala? พวกเขาดูเหมือนจะให้ประโยชน์เหมือนกัน

1
การย่อหน้าคลาสของปลั๊กอิน IntelliJ Scala ไม่มีสาระ
เมื่อคลาสเคสมีหลายฟิลด์และชื่อมีความยาวมักเป็นความคิดที่ดีที่จะเขียนแต่ละฟิลด์ในแต่ละบรรทัดเช่น: case class Person ( name: String, age: Int ) สิ่งนี้คล้ายกับstructนิยามC / C ++ และสามารถอ่านได้ทั้งหมดแม้ว่าคลาสเคสจะใหญ่กว่า แต่ปลั๊กอิน Scala เริ่มต้นของ IntelliJ IDEA จะเปลี่ยนการย่อหน้าโดยอัตโนมัติ: case class Person ( name: String, age: Int ) ซึ่งดูแปลกสำหรับฉัน แต่Scala Style Guideไม่ได้พูดถึงการเยื้องของคลาสเคส ฉันไม่พบสิ่งใดในการตั้งค่า IDE ที่สามารถเปลี่ยนพฤติกรรมนี้ มีตัวเลือกในการทำให้การเยื้องอัตโนมัติทำงานเหมือนกับที่ฉันอธิบายไว้ข้างต้นหรือปิดใช้งานการเยื้องอัตโนมัติสำหรับคลาสเคสหรือไม่?

7
วิธีที่สะอาดกว่าในการอัปเดตโครงสร้างที่ซ้อนกัน
สมมติว่าฉันมีสองสิ่งต่อไปนี้case class: case class Address(street: String, city: String, state: String, zipCode: Int) case class Person(firstName: String, lastName: String, address: Address) และตัวอย่างต่อไปนี้ของPersonคลาส: val raj = Person("Raj", "Shekhar", Address("M Gandhi Marg", "Mumbai", "Maharashtra", 411342)) ตอนนี้ถ้าผมต้องการที่จะปรับปรุงzipCodeของrajแล้วฉันจะต้องทำ: val updatedRaj = raj.copy(address = raj.address.copy(zipCode = raj.address.zipCode + 1)) ด้วยระดับที่มากขึ้นของการซ้อนสิ่งนี้จะทำให้น่าเกลียดยิ่งขึ้น มีวิธีที่สะอาดกว่า (เช่น Clojure's update-in) ในการอัปเดตโครงสร้างที่ซ้อนกันดังกล่าวหรือไม่?
124 scala  case-class  zipper 

6
วิธีสำนวนง่ายๆในการกำหนดการสั่งซื้อสำหรับคลาสเคสง่ายๆ
ฉันมีรายการอินสแตนซ์คลาสเคสสกาล่าอย่างง่ายและต้องการพิมพ์ตามลำดับที่คาดเดาได้และเป็นศัพท์โดยใช้list.sortedแต่ได้รับ "ไม่มีการกำหนดลำดับโดยนัยสำหรับ ... " มีนัยที่ให้การเรียงลำดับศัพท์สำหรับคลาสเคสหรือไม่? มีวิธีสำนวนง่ายๆในการผสมการเรียงลำดับศัพท์ในชั้นเรียนหรือไม่? scala> case class A(tag:String, load:Int) scala> val l = List(A("words",50),A("article",2),A("lines",7)) scala> l.sorted.foreach(println) <console>:11: error: No implicit Ordering defined for A. l.sorted.foreach(println) ^ ฉันไม่พอใจกับ 'แฮ็ค': scala> l.map(_.toString).sorted.foreach(println) A(article,2) A(lines,7) A(words,50)

5
การประกาศคลาสเคสสกาล่ามีข้อเสียอะไรบ้าง?
หากคุณกำลังเขียนโค้ดที่ใช้โครงสร้างข้อมูลที่สวยงามและไม่เปลี่ยนรูปจำนวนมากคลาสเคสดูเหมือนจะเป็นสิ่งที่มาจากสวรรค์ทำให้คุณได้รับสิ่งต่อไปนี้ทั้งหมดฟรีด้วยคีย์เวิร์ดเดียว: ทุกอย่างไม่เปลี่ยนรูปตามค่าเริ่มต้น Getters กำหนดโดยอัตโนมัติ การใช้งาน toString () ที่เหมาะสม สอดคล้องกับ () และ hashCode () อ็อบเจ็กต์ Companion ด้วยวิธี unapply () สำหรับการจับคู่ แต่อะไรคือข้อเสียของการกำหนดโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปเป็นคลาสเคส? มีข้อ จำกัด อะไรบ้างในชั้นเรียนหรือลูกค้า มีสถานการณ์ที่คุณควรเลือกคลาสที่ไม่ใช่เคสหรือไม่?
105 scala  case-class 

4
การสืบทอดคลาสเคส Scala
ฉันมีแอปพลิเคชันที่ใช้ Squeryl ฉันกำหนดโมเดลของฉันเป็นคลาสเคสส่วนใหญ่เนื่องจากฉันสะดวกที่จะมีวิธีการคัดลอก ฉันมีสองรุ่นที่เกี่ยวข้องกันอย่างเคร่งครัด ฟิลด์เหมือนกันการดำเนินการหลายอย่างเหมือนกันและจะถูกเก็บไว้ในตาราง DB เดียวกัน แต่มีพฤติกรรมบางอย่างที่สมเหตุสมผลในหนึ่งในสองกรณีเท่านั้นหรือที่สมเหตุสมผลในทั้งสองกรณี แต่แตกต่างกัน จนถึงตอนนี้ฉันใช้คลาสเคสเดียวเท่านั้นโดยมีแฟล็กที่แยกแยะประเภทของโมเดลและเมธอดทั้งหมดที่แตกต่างกันตามประเภทของโมเดลเริ่มต้นด้วย if นี่เป็นเรื่องที่น่ารำคาญและไม่ค่อยปลอดภัย สิ่งที่ฉันต้องการจะทำคือแยกพฤติกรรมทั่วไปและฟิลด์ในคลาสเคสของบรรพบุรุษและให้โมเดลจริงทั้งสองสืบทอดมาจากโมเดลนั้น แต่เท่าที่ฉันเข้าใจการสืบทอดจากคลาสเคสนั้นขมวดอยู่ใน Scala และเป็นสิ่งต้องห้ามด้วยซ้ำหากคลาสย่อยนั้นเป็นคลาสเคส (ไม่ใช่เคสของฉัน) อะไรคือปัญหาและข้อผิดพลาดที่ฉันควรทราบในการสืบทอดจากคลาสเคส มันสมเหตุสมผลไหมในกรณีของฉันที่จะทำเช่นนั้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.