2016-11-20 2 views
1

Also mein Code sieht wie folgtkönnen nicht impliziten Wert finden

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)) 
    } 

Jedoch hat ich den Fehler, dass Compiler nicht in der Lage ist impliziten Wert für Gleichung [MyClass] zu finden. Hier ist der Fehler, den ich bekomme.

Error:(38, 19) could not find implicit value for parameter eq: typeclasses.Eq[typeclasses.MyClass.type] 
    println(equality(MyClass, MyClass)) 

Sollte es Eq [MyClass] wurde noch nicht gefunden, da ich die MyClass-Objekt in App1 importieren und haben EqMyClass dort definiert? Muss ich das MyClass-Objekt auch in App1 importieren? Mein Verständnis war, dass scala Companion-Objekte von Arg-Typen untersucht, um implizite Defs zu finden?

Danke!

+0

Ich würde typeclasses über 'implizite val x = neue Eq [MyClass] {...}' schreiben – Reactormonk

Antwort

3

müssen Sie schreiben println(equality(MyClass(), MyClass()) seit MyClass ist das Companion-Objekt (des Typs MyClass.type) anstelle einer Instanz von MyClass.

Verwandte Themen