[Scala] structural subtyping?
От: Anton V. Kolotaev  
Дата: 08.11.13 12:57
Оценка:
Привет всем.

Есть базовый класс с перегруженным для набора типов методом:

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)
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.