2016-09-21 4 views
0

Я пытаюсь создать общий класс в Scala, который принимает числовые типы, которые внутри математики класса будут выполнены. Цель состоит в том, чтобы использовать различные математические типы в качестве аргументов шаблона. Как я могу получить эту работу:Scala, математика с заданными параметрами шаблона

def plus[T <: AnyVal](v1: T <:< AnyVal, v2: T <:< AnyVal): T = { 
    v1 + v2 
} 

so that I can do this: 
val t1 = 4, t2 = 5 
val t3 = plus(t1, t2) 
or 
val t3: Int = plus[Int](t1, t2) 

ответ

2

Вы собираетесь должны использовать классы типов. См. Spire. На самом деле, не ждите, просто используйте Spire. Это действительно невероятно и оптимизировано, чтобы избежать бокса как можно больше.

Если вы не хотите использовать Spire, вот пример того, что я имею в виду класс типов:

trait Add[A] 
    def apply(x: A, y: A): A 
} 

def plus[A](x: A, y: A)(implicit add: Add[A]) = add(x, y) 

И вы должны определить класс типов для каждого типа вы хотите поддержать.

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