Как определить определение циклического типа? - PullRequest
6 голосов
/ 10 августа 2009

Это недопустимое определение типа:

scala>  type Addable = { def +(subject: Addable) }
<console>:4: error: illegal cyclic reference involving type Addable
        type Addable = { def +(subject: Addable) }

Можно ли это выразить в скале?

Ответы [ 3 ]

4 голосов
/ 11 августа 2009

Нет, не может.

На странице 40 спецификации языка Scala, версия 2.7:

Однако статическая ошибка, если псевдоним типа ссылается рекурсивно насам конструктор определенного типа.То есть тип T в псевдониме типа type t [tps] = T может не иметь прямой или косвенной ссылки на имя t .

1 голос
/ 11 августа 2009

Вот что я сделал в библиотеке, которую я написал, HTH:

  trait Addable {
    type AddableType <: Addable
    def + (subject: AddableType): AddableType
  }
  trait Rational extends Addable {
    type AddableType = Rational
    override def + (subject: Rational): Rational 
  }
0 голосов
/ 10 августа 2009

Кажется, это может быть "исправлено" в Scala 2.8:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...