2014-01-29 116 views
1

我正在努力解決以下在編譯時拋出錯誤的問題「error:value dir不是類型參數A的成員」。但它是!Scala隱式參數綁定

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,但它不起作用。 –