2015-04-18 3 views
2

Есть ли лучший способ использования таблиц классов классов лучше/меньше? Простой пример:Лучший способ реализации определений экземпляров класса типа в Scala

trait Equal[A]{ 
    def equals(a: A, b: A): Boolean = a ==b 
} 

object Equal{ 
    def apply[A: Equal] = implicitly[Equal[A]] 

    implicit def IntEqual = new Equal[Int]{ 
    def equal(a: Int, b: Int): Boolean = a == b 
    } 

    implicit def OptionEqual = new Equal[Option]{ 
    def equal(a: Option, b: Option): Boolean = a == b 

// Implicit instances for all desired types is tedious 
    } 
+0

Я закончил с помощью https://github.com/mpilquist/simulacrum, который удаляет большое количество табличек котлов типа – user2726995

ответ

4

определяют метод, который принимает функцию в качестве входных данных и создает экземпляр класса типов для вас:

def eqInstance[A](f: (A, A) => Boolean): Equal[A] = new Equal[A] { 
    def equal(a: A, b: A): Boolean = f(a,b) 
} 

тогда ваши экземпляры класса типов могут быть гораздо более кратким:

val intEqual = eqInstance[Int](_ == _) 
Смежные вопросы