2010-04-19 26 views
7

Có lớp sau trong ngữ cảnh CPS (@cps [Unit]) tôi sẽ triển khai đặc điểm Seq như thế nào? Tôi có phải để lại các đặc điểm tiêu chuẩn như Seq sang một bên và chỉ cần thực hiện bản đồ, sơ đồ phẳng và tìm kiếm trong bối cảnh cps?Triển khai Seq [T] cho CPS-Classes

class DataFlowVariable[T] { 
    def apply(): T @cps[Unit] = ... 
} 

class DataFlowStream[T] extends Seq[T] { 

    override def iterator: Iterator[T] = new Iterator[T] { 
    private val iter = queue.iterator 
    def hasNext: Boolean = iter.hasNext 
    def next: T = { // needed: next: T @cps[Unit] ! 
     val dfvar = iter.next 
     // dfvar() // not possible as dvar.apply has type "T @cps[Unit]" 
    } 
    } 
} 
+0

Câu hỏi của tôi có quá khó hiểu không? Tóm lại: Khi tất cả các hàm hoạt động trong ngữ cảnh CPS cần trả về một loại chú thích với cps [X], tôi không thể thực hiện bất kỳ Traits/Giao diện chuẩn nào như Seq vì chữ ký của chúng thiếu các chú thích @ cps. Điều này có đúng không? – hotzen

Trả lời

1

OK, theo như tôi thấy có vẻ như việc triển khai giao diện/đặc điểm như Seq là không thể. Tuy nhiên, khi Scala ghi lại các cú pháp đường-for vào các cuộc gọi thông thường/bản đồ, nó hoạt động tốt để chỉ thực hiện mapforeach với chú thích cps bắt buộc. bộ lọc & đồng cũng nên hoạt động.

Tuy nhiên, bất kỳ lời khuyên nào về cách triển khai các đặc điểm trong ngữ cảnh cps được đánh giá cao.

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