Это продолжение к this question.scala self-type: член типа ошибка параметра
Почему этот код не компилируется и как его исправить?
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
^
Спасибо. Что случилось? – dsg
Объявление самонастройки однонаправлено. В нем говорится, что Vec [V] - тип, соответствующий типу V, но не тот, что V является типом, соответствующим Vec [V] (фактическая семантика более активна, так как само-типы внешне не видны, но это то, что оно составляет здесь). У вашего исходного кода был - возврат V, но для вызова нормы требуется Vec [V]. –