2010-11-21 30 views
12

Tôi đang cố triển khai giá thầu Plurk API cho Scala, nhưng tôi có lựa chọn thiết kế để thực hiện.Tôi có nên sử dụng lớp niêm phong hoặc Enumeration ở Scala?

Ví dụ: thuộc tính giới tính của người dùng Plurk có thể là một trong "nam", "nữ", "khác".

sealed trait Gender 
object Male extends Gender 
object Female extends Gender 
object Others extends Gender 

Câu hỏi đặt ra là tôi nên thích lớp/đối tượng được niêm phong như ví dụ trên, trên liệt kê để thể hiện các kiểu liệt kê?

Bởi vì tôi thấy rằng hiếm khi tôi gặp Enumeration khi tôi sử dụng thư viện Scala khác, và rất nhiều hướng dẫn của diễn viên sử dụng lớp/đối tượng được đóng dấu để đại diện cho thông điệp cho diễn viên.

Vì vậy, điều này có nghĩa là trong Scala, lớp được niêm phong là lựa chọn tốt hơn/thông thường hơn trên Bảng liệt kê?

+0

bản sao có thể có của [Trường hợp lớp so với Danh sách trong Scala] (http://stackoverflow.com/questions/1898932/case-classes-vs-enumerations-in-scala) –

Trả lời

11

Nếu bạn không cần lặp lại đối tượng Giới tính hoặc cần các phương pháp như nextprevious, các lớp và đối tượng là giải pháp phù hợp.

Nếu bạn cần các tính năng của "lớp học và đối tượng" và câu hỏi "scala.Enumeration" thisthis có thể bạn quan tâm.

+0

Nếu bạn cần lặp lại các đặc điểm kín bạn có thể cũng sử dụng giải pháp dựa trên macro [this] (http://stackoverflow.com/questions/13671734/iteration-over-a-sealed-trait-in-scala) – Oswaldo

9

Sử dụng Enumeration cũng rẻ hơn một chút về số lượng lớp học. Trong ví dụ Gender không quan trọng, nhưng nó có thể bắt đầu quan trọng nếu bạn muốn lập mô hình hướng dẫn xử lý bằng cách liệt kê với hơn 100 phần tử.

+2

'Liệt kê' sẽ đẹp hơn nếu trình biên dịch cảnh báo về các trường hợp bị thiếu thích cho những đặc điểm kín. –

Các vấn đề liên quan