2009-08-10 16 views

Respuesta

4

No, no puede .

En la página 40 de La 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

Parece que esto puede ser "fijo" en la Scala 2.8:

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

+0

no funciona con la corriente nightly build. Bienvenido a la versión 2.8.0.r18457-b20090810020144 de Scala (cliente de Java HotSpot (TM) V M, Java 1.6.0_12). Escriba las expresiones para que se evalúen. Tipo: ayuda para obtener más información. scala> clase A { | tipo Addable = {def + (asunto: Addable)} | } : 5: error: referencia cíclica ilegal que implica el método + tipo Addable = {def + (asunto: Addable)} Al menos el mensaje de error ha cambiado :-). –

+0

¿Has probado la opción de línea de comando experimental mencionada en la parte inferior del artículo anterior? – skaffman

+0

Mismo resultado con: scala -Yrecursion 10 –

1

Aquí es lo que hice en una biblioteca que escribí, HTH:

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

La definición tiene que ser de tipo estructural ya que las clases subrayadas no se pueden cambiar (como Int, Long). –

+2

Hm, ¿quizás podría definir una vista (def implícita) para convertir estas clases en Addable? – Yardena

Cuestiones relacionadas