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"))
}
Run Code Online (Sandbox Code Playgroud)
怎么修:
错误:(17,37)找不到参数e的隐含值:CuteChecker [A] def isItCute [A](a:A)=隐式[CuteChecker [A]].isCute(a)^
如果您使用implicitly它,只需在范围内"显式"提供隐式值.所以你的isItCute方法应该是以下两种变体之一:
def isItCute[A: CuteChecker](a: A) = implicitly[CuteChecker[A]].isCute(a)
def isItCute[A](a: A)(implicit cc: CuteChecker[A]) = cc.isCute(a)
Run Code Online (Sandbox Code Playgroud)
接下来,您需要一个隐式实例Cat.这implicit class对你没有帮助,因为它需要一个非隐式的类型值Cat.您可以看到此方法是错误的,因为从不使用构造函数参数.你可以使用implicit object:
implicit object CatCuteChecker extends CuteChecker[Cat] {
def isCute(c: Cat) = true
}
Run Code Online (Sandbox Code Playgroud)
最后,您在object中提供了implicits CuterImplicits.要使它们可见Main,您需要导入内容:
object Main extends App {
import CuterImplicits._
CheckingForCuteness.isItCute[Cat](Cat("funny"))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12598 次 |
| 最近记录: |