gpt4 book ai didi

scala - 找不到参数e的隐式值

转载 作者:行者123 更新时间:2023-12-04 11:35:49 25 4
gpt4 key购买 nike

case class Cat(name: String)

object CuterImplicits {
implicit class CatCuteChecker(c: Cat) {
def isCute(c: Cat) = true
}
}

trait CuteChecker[A] {
def isCute(a: A): Boolean
}

object CheckingForCuteness {
def isItCute[A](a: A) = implicitly[CuteChecker[A]].isCute(a)
}

object Main extends App {
CheckingForCuteness.isItCute[Cat](Cat("funny"))
}

怎么修:

Error:(17, 37) could not find implicit value for parameter e: CuteChecker[A] def isItCute[A](a: A) = implicitly[CuteChecker[A]].isCute(a) ^

最佳答案

如果您使用implicitly,它只是制作a value implicitly in scope "explicitly" available。因此,您的isItCute方法应为以下两个变体之一:

def isItCute[A: CuteChecker](a: A) = implicitly[CuteChecker[A]].isCute(a)

def isItCute[A](a: A)(implicit cc: CuteChecker[A]) = cc.isCute(a)

接下来,您需要 Cat的隐式实例。 implicit class在这里无济于事,因为它需要使用 Cat类型的非隐式值。您会看到这种方法是错误的,因为从不使用构造函数参数。您可以使用 implicit object:
implicit object CatCuteChecker extends CuteChecker[Cat] {
def isCute(c: Cat) = true
}

最后,在对象 CuterImplicits中提供隐式对象。为了使它们对于 Main可见,您需要 import the contents:
object Main extends App {
import CuterImplicits._
CheckingForCuteness.isItCute[Cat](Cat("funny"))
}

关于scala - 找不到参数e的隐式值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34466222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com