Как мне создать универсальную функцию Scala, которая возвращает объект на основе универсального типа?

(вопрос для начинающих по Scala)

Я пытаюсь написать программу на Scala, которая выполняет ряд проверок исходных файлов C ++, и я хочу реализовать необязательное ведение журнала проверок.

Следующее отлично работает для однократной проверки:

  val headerFiles = files.filter(_.matches(".*?\\.h$"))
  val headerGuardChecker = if(options.contains('verbose)) {
    new HeaderGuard with LoggingFileCheckerTrait
  } else {
    new HeaderGuard
  } 
  headerFiles.foreach(h => if (! headerGuardChecker.check(new File(h))) println(h + " doesn't have a header guard"))

однако, когда я пытаюсь обобщить это с помощью обобщений:

  def checker[T] = if(options.contains('verbose)) {
    new T with LoggingFileCheckerTrait
  } else {
    new T
  } 
  val headerFiles = files.filter(_.matches(".*?\\.h$"))
  headerFiles.foreach(h => if (! checker[HeaderGuard].check(new File(h))) println(h + " doesn't have a header guard"))

Я получаю ошибки компиляции в двух новых операторах, утверждая, что T не тип. Я считаю, что это вызвано стиранием типа, но я не нашел способа обойти это. Есть ли способ сделать то, что я хочу сделать?

7
задан Anthony Berent 8 December 2011 в 13:12
поделиться