2012-01-20 25 views
9

Tôi đã viết một đặc điểm để sắp xếp các vòng lặp trong Scala, và mất nhiều thời gian để tạo một lớp mà tôi có thể kết hợp nó với việc ghi lại đặc điểm đó. Tại sao các quyết định thiết kế đã được thực hiện để không cho phép người dùng viết những câu như:Tại sao tất cả các bộ sưu tập bất biến cơ bản cuối cùng hoặc được niêm phong trong scala?

new List[Int] with SuperAwesomeTrait[Int]? 

Bây giờ nếu tôi muốn làm điều này, tôi cần phải làm một số hack lạ như,

class StupidList extends LinearSeq { 
    val inner = List() 
    /* reimplement list methods by calling into inner */ 
} 

và sau đó

new StupidList[Int] with SuperAwesomeTrait[Int]. 

Trả lời

9

Bởi vì nếu tôi viết

someList match { 
    case Cons(head, tail) => whatever 
    case Nil => somethingElse 
} 

Tôi không muốn logic của tôi bị phá vỡ bởi một lớp con mới, bất ngờ.

Tôi nghi ngờ bạn đang cố gắng giải quyết vấn đề bằng cách sử dụng phân lớp con sẽ được giải quyết tốt hơn với sự cố.

+0

Tuy nhiên, thực tế tương tự sẽ dẫn đến việc tôi không thể loại bỏ bất ổn của stdlib bằng lực gần như vô hạn. Nhược điểm, tuy nhiên trả về một danh sách mới để bạn không bị hỏng. – Joshua

+0

Tại sao đây là vấn đề đối với 'Danh sách' nhiều hơn bất kỳ lớp nào khác? –

+2

@Joshua, tôi không biết bạn đang nói về cái gì. Tôi đang sử dụng mô hình phù hợp để deconstruct một cái gì đó. Tôi không tạo ra gì cả. –

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