是否有更简洁的方法来编写此方法?优选地,我不需要匹配所有有效类型,而是允许每个具有*方法的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]
}
答案 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