2017-01-02 3 views
0

я следующие классы определены:В scala, почему тип псевдонима в классе не может быть передан для наследования?

файл: PyRef.scala:

package mypackage 
class PyBinding() { 
... 
} 

trait PyRef { 

    type Binding = PyBinding 
} 

файл: Link.scala:

class Link() extends PyRef { 

    override type Binding = Link.PyBindingImpl 
} 

object Link { 
    class PyBindingImpl() extends PyRef#Binding() { 
    } 
} 

В сборнике, была выброшена следующее сообщение об ошибке:

Error:(222, 34) class type required but mypackage.PyBinding found 
       ) extends PyRef#Binding() { 

Почему это происходит, и что мне делать, чтобы обойти его? Я использую Scala 2.10.

+0

Я думаю, что вы пытаетесь построить что-то с [классы типов] (https://tpolecat.github.io/2015/04/29/f-bounds.html) и [ aux pattern] (https://gigiigig.github.io/posts/2015/09/13/aux-pattern.html). – Reactormonk

+0

Объявление типа Связывание как ковариантное или связывание <: PyBinding разбивает несколько других типов функций, я не уверен, стоит ли это. – tribbloid

+0

@tribboid ... Я дал вам плохой документ, который заставил вас пропустить момент. Попробуйте следующее: http://typelevel.org/cats/typeclasses.html – Reactormonk

ответ

0

Я не думаю, что вы можете использовать типы проекций A#B в Scala в качестве типов способностей. Следующие две вещи работают

trait Link { 
    class PyBindingImpl() extends PyBinding() 
} 

trait Link { 
    val ref: PyRef 

    class PyBindingImpl() extends ref.Binding() 
} 
Смежные вопросы