2009-08-10 27 views

Trả lời

4

Không, nó không thể .

Trên trang 40 của The Scala Language Specification Version 2.7:

However, it is a static error if a type alias refers recursively to the defined type constructor itself. That is, the type T in a type alias type t[tps] = T may not refer directly or indirectly to the name t.

0

Có vẻ như điều này có thể được "cố định" trong Scala 2.8:

http://lampsvn.epfl.ch/trac/scala/ticket/1291

+0

Nó không làm việc với việc xây dựng hàng đêm hiện hành. Chào mừng bạn đến với phiên bản Scala 2.8.0.r18457-b20090810020144 (Java HotSpot (TM) Client V M, Java 1.6.0_12). Nhập các biểu thức để chúng được đánh giá. Loại: trợ giúp để biết thêm thông tin. scala> lớp A { | loại Có thể thêm = {def + (chủ đề: Có thể thêm)} | } : 5: lỗi: tham chiếu cyclic bất hợp pháp liên quan đến phương pháp + loại Có thể thêm = {def + (chủ đề: Có thể thêm)} Ít nhất thông báo lỗi đã thay đổi :-). –

+0

Bạn đã thử tùy chọn dòng lệnh thử nghiệm được đề cập ở cuối bài viết ở trên chưa? – skaffman

+0

Kết quả tương tự với: scala -Yrecursion 10 –

1

Đây là những gì tôi đã làm trong một thư viện tôi đã viết, HTH:

trait Addable { 
    type AddableType <: Addable 
    def + (subject: AddableType): AddableType 
    } 
    trait Rational extends Addable { 
    type AddableType = Rational 
    override def + (subject: Rational): Rational 
    } 
+0

Định nghĩa phải là một kiểu cấu trúc vì các lớp gạch chân không thể thay đổi (như Int, Long). –

+2

Hm, có lẽ bạn có thể xác định một khung nhìn (ngầm định) để chuyển đổi các lớp này thành Có thể thêm? – Yardena

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