定义上限类型以允许算术运算

时间:2015-02-04 20:41:21

标签: scala

是否可以定义允许函数中基本算术运算的上限类型?只需使这项工作:

def a[T](t:T):T = {t*t}

3 个答案:

答案 0 :(得分:2)

Scala中没有可用的所有数字类型的通用超类型,所以我会使用Numeric特征。它不是类型绑定,而是一个类型类,您可以在其中要求隐式Numeric[A]在范围内可用。隐含已存在于所有Scala的数字类型的范围内。

def a[T](t: T)(implicit num: Numeric[T]): T = num.times(t, t)

或者

def a[T: Numeric](t: T): T = implicitly[Numeric[T]].times(t, t)

答案 1 :(得分:1)

Scala spire库太棒了。它提供了许多类型的数字抽象。

import spire.math._
import spire.implicits._

def negate[A: Integral](x: A) = -(42 * (x /~ 42) + x % 42)

答案 2 :(得分:0)

还找到了类似的解决方案(也允许划分)

import scala.math.Integral.Implicits._  

def a[T:Integral](t:T):T = t * t / t