无法找到隐含的价值

时间:2016-11-20 16:14:30

标签: scala implicit

所以我的代码如下所示

    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类型的伴随对象以找到隐式defs?

谢谢!

1 个答案:

答案 0 :(得分:3)

您必须写println(equality(MyClass(), MyClass()),因为MyClass是伴随对象(类型为MyClass.type)而不是MyClass的实例。