我有两个基本相同的案例类,除了其中一个具有Int且另一个具有Double成员。我正在尝试创建一个共同的特征,我可以将其用于在任一函数上进行操作并允许基本数字运算。但是到目前为止,我还不知道如何使用数字或操作类型:

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?

最佳答案

import scala.Numeric.Implicits._

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

09-07 08:21