2016-11-20 2 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)) 
    } 

Однако я получаю ошибку, что компилятор не может найти неявное значение для уравнения [MyClass]. Вот ошибка, которую я получаю.

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

Не должно быть найдено эквалайзером [MyClass], так как я импортировать объект MyClass в App1 и EqMyClass определены там? Также мне нужно импортировать объект MyClass в App1? Мое понимание заключалось в том, что scala смотрит на сопутствующие объекты типов arg, чтобы найти неявные defs?

Спасибо!

+0

Я бы написал typeclasses через 'implicit val x = new Eq [MyClass] {...}' – Reactormonk

ответ

3

Вы должны написать println(equality(MyClass(), MyClass()), так как MyClass является компаньонным объектом (типа MyClass.type) вместо экземпляра MyClass.

Смежные вопросы