Scala隐式参数绑定

时间:2014-01-29 10:19:02

标签: scala implicit type-parameter

我正在努力解决以下在编译时抛出错误的问题“错误:值dir不是类型参数A的成员”。但它是!

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?

上指定多个类型约束

1 个答案:

答案 0 :(得分:3)

将所有约束放在一起。

将类型签名更改为

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

你的例子编译得很好。