Scala - 编写通用数值运算方法的清洁方式

时间:2015-07-10 16:41:02

标签: scala

是否有更简洁的方法来编写此方法?优选地,我不需要匹配所有有效类型,而是允许每个具有*方法的Type。另外,有没有办法在最后不需要asInstanceOf[T]

def expr_neg[T <: AnyVal](value: T): T = value match {
  case int: Int => (int * -1).asInstanceOf[T]
  case long: Long => (long * -1).asInstanceOf[T]
  case float: Float => (float * -1).asInstanceOf[T]
  case double: Double => (double * -1).asInstanceOf[T]
}

2 个答案:

答案 0 :(得分:5)

使用Numeric Typeclass会更好:

Socket.io

答案 1 :(得分:2)

除@melps答案外,还可以使用Numeric.Implicits提供的算术运算符:

import Numeric.Implicits._

def f[T: Numeric](x: T) = -x

这很酷,但遗憾的是Scala文档中从未提及过。这也适用于Ordering

import Ordering.Implicits._

def g[T: Ordering](x: T) = x < x