2009-08-10 15 views

Odpowiedz

4

Nie, to nie może .

Na stronie 40 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

Wydaje się to może być "stałe" w Scala 2.8:

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

+0

To nie działa z aktualnym nightly build. Witamy w Scala w wersji 2.8.0.r18457-b20090810020144 (klient Java HotSpot ™ V M, Java 1.6.0_12). Wpisz wyrażenia, aby je ocenić. Wpisz: help, aby uzyskać więcej informacji. scala> klasa A { | type Addable = {def + (subject: Addable)} | } : 5: błąd: niedozwolone cykliczne odwołanie dotyczące metody + typ Addable = {def + (subject: Addable)} Przynajmniej komunikat o błędzie zmieniono :-). –

+0

Czy wypróbowałeś eksperymentalną opcję wiersza poleceń wymienioną na dole powyższego artykułu? – skaffman

+0

Taki sam wynik z: scala -Yrecursion 10 –

1

Oto co zrobiłem w bibliotece pisałem, HTH:

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

Definicja musi być typem strukturalnym, ponieważ nie można zmienić kategorii podkreślenia (np. Int, Long). –

+2

Hm, może mógłbyś zdefiniować widok (domyślna def), aby przekonwertować te klasy do Addable? – Yardena

Powiązane problemy