scala self-type: ошибка параметра типа члена - PullRequest
2 голосов
/ 23 января 2011

Это продолжение этого вопроса .

Почему этот код не компилируется и как я могу это исправить?

trait Vec[V] { self:V =>
  def -(v:V):V
  def dot(v:V):Double

  def norm:Double = math.sqrt(this dot this)
  def dist(v:V):Double = (this - v).norm
}

Ошибка:

Vec.scala:6: error: value norm is not a member of type parameter V
  def dist(v:V):V = (this - v).norm
                               ^

Ответы [ 2 ]

6 голосов
/ 23 января 2011

Изменяя определение - на

def -(v:V):Vec[V]
3 голосов
/ 24 января 2011

Правильное решение:

trait Vec[V <: Vec[V]] { self:V =>
  def -(v:V):V
  def dot(v:V):Double

  def norm:Double = math.sqrt(this dot this)
  def dist(v:V):Double = (this - v).norm
}

Реквизиты Дебилски для ответа на связанный вопрос .

...