2016-11-20 54 views
1

所以我的代碼如下無法找到內含價值

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?

謝謝!

+0

我會通過'implicit val x = new Eq [MyClass] {...}寫出類型類' – Reactormonk

回答

3

您必須編寫println(equality(MyClass(), MyClass()),因爲MyClass是配對對象(類型爲MyClass.type),而不是MyClass的實例。