Для отображения 1: 1 эти var
s должны быть изменены на def
s.
trait Compiler {
def printInstruction: String
}
class JavaCompiler extends Compiler {
def printInstruction = "System.out.print(arg0);"
}
class ScalaCompiler extends Compiler {
def printInstruction = "print(arg0);"
}
def
объявляет метод.Когда вы не предоставляете реализацию, она становится абстрактным методом.
РЕДАКТИРОВАТЬ:
Метод, используемый здесь, является допустимым и полезным методом.В качестве альтернативы вы можете использовать один из следующих двух методов для моделирования вашей проблемы.
1) Дискриминационные союзы.(он же типы сумм.)
Обратитесь к этой превосходной статье , чтобы узнать об этой концепции.Вот как ваш пример, вероятно, выглядел бы при моделировании таким образом:
sealed trait Compiler {
def printInstruction: String = this match {
case JavaCompiler => "System.out.print(arg0);"
case ScalaCompiler => "print(arg0);"
}
}
case object JavaCompiler extends Compiler
case object ScalaCompiler extends Compiler
2) Тип шаблона класса.
Здесь - отличный пост Даниэля СобралаЭта тема.Вы можете найти еще несколько вещей, прибегая к помощи терминов тип-класс, шаблон, Scala, имплициты и т. Д. Вот как может выглядеть ваш код, если проблема смоделирована с помощью шаблона класса типа:проблема, оригинальный подход и подход дискриминированных союзов, кажется, лучшие решения для моделирования.