2014-01-29 2 views
1

Я борюсь со следующей проблемой, которая вызывает ошибку во время компиляции. Error: value dir не является членом параметра типа A. Но это!Scala Неявный параметр bound

trait Logger { def dir: String } 

trait LoggerFile[A <: Logger] { 
    def extractor: String => Option[A] 
} 

def getHistory[A: LoggerFile](): String = { 
    implicitly[LoggerFile[A]].extractor("abc") match { 
    case Some(a) => a.dir 
    case None => "" 
    } 
} 

Я был в состоянии решить эту проблему с помощью this answer:

def getHistory[A <: Logger]()(implicit env: LoggerFile[A]): String = { 

Но я предпочел бы систему работать до преобразования, то есть с синтаксическим сахаром. Есть ли способ указать несколько ограничений типа на A?

ответ

3

Просто соедините все ограничения.

После изменения типа подписи

def getHistory[ A <: Logger : LoggerFile ](): String 

вашего примера компилируется нормально.

+0

Отлично. Я попробовал наоборот: LoggerFile <: Logger, но это не сработало. –

Смежные вопросы