我知道这对于简单的案例检查来说非常简单,但似乎应该可以编写一个类似于以下内容的方法,它可以推广到所有数字类型:
def checkNonZero(t: Long, field: String): List[String] = {
if (t == 0) println("was zero") else println("wasn't zero")
}
最好的方法是什么?
答案 0 :(得分:6)
可以使用Number
类型完成此操作。
def checkNonZero(n: Number) = n != 0
或者您可以使用Numeric
类型类。
def checkNonZero[T : Numeric](n: T) = {
val num = implicitly[Numeric[T]]
!num.equiv(n, num.zero)
}
修改强>
实际上,你可以这样写:
def checkNonZero[T : Numeric](n: T) = n != 0
除非您定义Numeric
的新自定义实例。
答案 1 :(得分:3)
Jasper-M的第二个解决方案的另一种方法如下:
def isNotZero[A](n: A)(implicit num: Numeric[A]) = !num.equiv(n, num.zero)
这会保存第val num = implicitly[Numeric[A]]
行,如果您愿意,还可以使用num
。
尽管这种方法实际上采用了2个参数,因为第二个参数是隐含的,你可以像使用任何其他非咖喱单参数方法一样使用它:
isNotZero(3) // true
isNotZero(0.1) // true
isNotZero(0) // false
isNotZero(0.0) // false