簡體   English   中英

Scala隱式參數綁定

[英]Scala Implicit parameter bound

我正在努力解決以下在編譯時拋出錯誤的問題“錯誤:值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 => ""
  }
}

我能夠通過使用這個答案克服這個問題:

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

但我希望系統在轉換之前工作,即使用語法糖。 有沒有辦法在A上指定多個類型約束?

只需將所有約束放在一起。

將類型簽名更改為

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

你的例子編譯得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM