2016-04-01 4 views
3

Я изучаю Scala и застреваю с ошибкой, связанной с дженериками. Я определил черту какНезаконная циклическая ссылка, включающая класс

trait myTrait[ 
    A, B, 
    Self[X, Y] <: myTrait[X, Y, Self]] { 
protected def self: Self[A, B] 
} 

и мой класс как

class myClass[B] extends myTrait[Int, B, myClass]{ 
    override protected def self:myClass[B] = this 
} 

Это дает мне ошибку компиляции «нелегальный циклическая ссылка с участием класса MyClass». Ошибка исчезает, если я объявляю myClass как

class myClass[A, B] extends myTrait[A, B, myClass]{ 
    override protected def self:myClass[A, B] = this 
} 

Что я делаю неправильно?

ответ

0

Это не ошибка я получаю в 2.11.7:

myClass takes one type parameter, expected: two 

Который имеет смысл: myClass используется в качестве аргумента SelfMyTrait, что требует два параметра типа.