编写通用方法的最佳方法,该方法检查scala中的数字是否为0

时间:2014-06-28 00:50:21

标签: scala

我知道这对于简单的案例检查来说非常简单,但似乎应该可以编写一个类似于以下内容的方法,它可以推广到所有数字类型:

  def checkNonZero(t: Long, field: String): List[String] = {
    if (t == 0) println("was zero") else println("wasn't zero")
  }

最好的方法是什么?

2 个答案:

答案 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