2014-11-01 3 views
2

У меня есть два класса case, которые в основном идентичны, за исключением того, что у одного есть Int и другие двойные члены. Я пытаюсь создать общую черту, которую я могу использовать для функций, работающих на обоих, и позволяя выполнять основные числовые операции. Но до сих пор я не могу понять, как использовать либо числовые или Ops типов:подпись типа scala, позволяющая числовым операциям на членах

trait Sentiment[A] { 
    def positive: A 
    def negative: A 
} 

case class IntSentiment(positive: Int, negative: Int) extends Sentiment[Int] 

Я хотел бы, чтобы придумать с функцией ограничением, так что я могу выполнять числовой оп на членах, то вдоль линии:

def effective[A](sentiment: Sentiment[A]): A = { 
    sentiment.positive - sentiment.negative 
} 

Это не работает, и я полагаю, что мне нужно, чтобы вызвать класс Numeric типа так или иначе, но ближайший я пришел в:

def effective[A](sentiment: Sentiment[A])(implicit num: Numeric[A]): A = { 
    num.minus(sentiment.positive,sentiment.negative) 
} 

есть ли тип ограничение/подпись на Sentiment и/или effective Я могу определить, на самом деле просто использовать + и - ops на членах напрямую?

+2

Кстати, общие цифры в простой Scala в коробке, так что не все так быстро. Возможно, они вам не нужны. Если да, проверьте Шпиль. –

+0

Spire выглядит интересным. Спасибо за указатель –

ответ

4
import scala.Numeric.Implicits._ 

def effective[A : Numeric](sentiment: Sentiment[A]): A = { 
    sentiment.positive - sentiment.negative 
} 

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

  • Нет связанных вопросов^_^