无法找到隐式值
Unable to find implicit value
所以我的代码如下所示
package typeclasses
trait Eq[T]{
def == (t1: T, t2: T) : Boolean
}
case class MyClass()
object MyClass {
implicit object EqMyClass extends Eq[MyClass] {
override def ==(t1: MyClass, t2: MyClass): Boolean = true
}
}
object App1 extends App{
import Tree._
import MyClass._
def equality[T](t1: T, t2: T)(implicit eq: Eq[T]): Boolean = eq.==(t1, t2)
//println(equality(Node(1), Node(2)))
println(equality(MyClass, MyClass))
}
但是我收到编译器无法找到 Eq[MyClass] 的隐式值的错误。这是我得到的错误。
Error:(38, 19) could not find implicit value for parameter eq: typeclasses.Eq[typeclasses.MyClass.type]
println(equality(MyClass, MyClass))
它不应该找到 Eq[MyClass] 因为我将 MyClass 对象导入 App1 并在其中定义了 EqMyClass 吗?我什至还需要将 MyClass 对象导入 App1 吗?我的理解是 scala 查看 arg 类型的伴随对象以找到隐式定义?
谢谢!
你必须写 println(equality(MyClass(), MyClass())
因为 MyClass
是伴随对象(MyClass.type
类型)而不是 MyClass
.
的实例
所以我的代码如下所示
package typeclasses
trait Eq[T]{
def == (t1: T, t2: T) : Boolean
}
case class MyClass()
object MyClass {
implicit object EqMyClass extends Eq[MyClass] {
override def ==(t1: MyClass, t2: MyClass): Boolean = true
}
}
object App1 extends App{
import Tree._
import MyClass._
def equality[T](t1: T, t2: T)(implicit eq: Eq[T]): Boolean = eq.==(t1, t2)
//println(equality(Node(1), Node(2)))
println(equality(MyClass, MyClass))
}
但是我收到编译器无法找到 Eq[MyClass] 的隐式值的错误。这是我得到的错误。
Error:(38, 19) could not find implicit value for parameter eq: typeclasses.Eq[typeclasses.MyClass.type]
println(equality(MyClass, MyClass))
它不应该找到 Eq[MyClass] 因为我将 MyClass 对象导入 App1 并在其中定义了 EqMyClass 吗?我什至还需要将 MyClass 对象导入 App1 吗?我的理解是 scala 查看 arg 类型的伴随对象以找到隐式定义?
谢谢!
你必须写 println(equality(MyClass(), MyClass())
因为 MyClass
是伴随对象(MyClass.type
类型)而不是 MyClass
.