簡體   English   中英

Scala類型類找不到隱式實例

[英]Scala type class can't find implicit instances

我試圖在Scala中創建一個類型類,並使用它來創建一個簡單的多態案例類。 本示例未編譯,並給出了“找不到參數writer的隱式值:A $ A228.this.ValueWriter [T]”。 我真的不知道可能出什么問題或從哪里開始。

trait Keeper

case class StringKeeper(measure: String) extends Keeper

case class StringLengthKeeper(measure: Int) extends Keeper


trait ValueWriter[A] {
  def write(value: String): A
}

object DefaultValueWriters {
  implicit val stringWriter = new ValueWriter[StringKeeper] {
    def write(value: String) = StringKeeper(value)
  }
  implicit val stringLengthWriter = new ValueWriter[StringLengthKeeper] {
    def write(value: String) = StringLengthKeeper(value.length)
  }
}

object Write {
  def toWrite[A](value: String)(implicit writer: ValueWriter[A]) = {
    writer.write(value)
  }
}


case class WriterOfKeepers[T <: Keeper](value: String) {

  def run: T = {
    Write.toWrite[T](value)
  }

}

import DefaultValueWriters._

val writerLengthKeeper = WriterOfKeepers[StringLengthKeeper]("TestString")

writerLengthKeeper.run

調用Write.toWrite時,作用域中沒有隱式ValueWriter

您需要在構造函數中包含隱式參數

case class WriterOfKeepers[T <: Keeper : ValueWriter](value: String) {

  def run: T = {
    Write.toWrite[T](value)
  }

}

或在方法中

case class WriterOfKeepers[T <: Keeper](value: String) {

  def run(implicit writer: ValueWriter[T]): T = {
    Write.toWrite(value)
  }

}

或找到其他符合您要求的方式(我不知道這些方式)。

暫無
暫無

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

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