scala类型签名允许成员上的数字操作

时间:2014-11-01 20:19:16

标签: scala typeclass generic-constraints

我有两个基本相同的案例类,除了一个有Int和其他Double成员。我正在尝试创建一个共同的特征,我可以用它来操作任何一个函数并允许基本的数字操作。但到目前为止,我无法弄清楚如何使用Numeric或Ops类型:

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上是否存在类型约束/签名?我可以定义直接在成员上使用+-操作?

1 个答案:

答案 0 :(得分:5)

import scala.Numeric.Implicits._

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