【发布时间】:2023-03-17 08:59:01
【问题描述】:
我试图在隐式实现方法中调用Dog 的方法bark,但是我得到了
def speak[Dog](dog: Dog): String = dog.bark ^ 第 16 行:错误:值 bark 不是类型参数 Dog 的成员
这是我的代码
// Define class/type
case class Dog(val breed: String) {
val bark: String = s"Bark!! I am a $breed"
}
// Define interface
trait Speakable[A] {
def speak[A](animal: A): String
}
// Define interface companion object, where we can provide
// implicit implementation methods
object Speakable {
def speak[A](animal: A)(implicit sp: Speakable[A]) = sp.speak(animal)
implicit val dogSpeak: Speakable[Dog] = new Speakable[Dog] {
def speak[Dog](dog: Dog): String = dog.bark
}
}
提前致谢
【问题讨论】:
-
[Dog]只是一个随机类型参数。它可以是任何东西。删除它,这样你就不会隐藏案例类Dog -
你还通过定义另一个类型参数
A给方法来隐藏Speakable的类型参数A在speak中。