Привет всем.
Есть базовый класс с перегруженным для набора типов методом:
package object PrettyPrinter
{
abstract class Base
{
def apply(x : AST.Type) : String
def apply(x : AST.Expr) : String
def apply(x : AST.BooleanExpr) : String
def apply(x : AST.CondSymbol) : String
def apply(x : AST.BinOpSymbol) : String
def apply(p : AST.Parameter) : String
def apply(p : AST.QualifiedName) : String
def apply(p : AST.Annotation) : String
def apply(p : AST.DocString) : String
def apply(p : AST.FunDef) : String
def apply(p : AST.Definitions) : String
}
var instance : Base = null
}
Соответственно, в каждом из упомянутых классов переопределяется метод toString следующим образом:
case class QualifiedName(names : List[String]){
override def toString = PrettyPrinter.instance(this)
}
Вопрос заключается в том, можно ли вынести его реализацию в некий трейт, от которого уже наследовать эти классы?
trait Printable[T] extends T
{
// как можно сказать, что ограничением на тип T является
// требование наличия метода apply(p : T) : String в классе PrettyPrinter.Base?
override def toString = PrettyPrinter.instance(this)
}