测试所有类型的通用空值

时间:2011-12-29 22:17:04

标签: scala

我正在寻找测试任何类型的值是否为空(或默认值)的解决方案。即Any上用于测试String实例是否等于""Int - 0Float的某种方法 - 到0fBooleanfalseList不包含任何项目等等。 Primarilly我对标准库中是否存在某种解决方案感兴趣,如果不存在,您将如何实现它。我相信这可能是有用的,如果它不存在于标准库中,则应该建议它。

2 个答案:

答案 0 :(得分:11)

使用Scalaz中的Zero类型类。

scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._

scala> def isEmpty[A : Zero](value: A) = value == mzero[A]
isEmpty: [A](value: A)(implicit evidence$1: scalaz.Zero[A])Boolean

scala> isEmpty("")
res0: Boolean = true

scala> isEmpty(List())
res1: Boolean = true

scala> isEmpty(false)
res2: Boolean = true

scala> isEmpty("O HAI")
res3: Boolean = false
我的Link to a blog post关于相关主题。

答案 1 :(得分:2)

不是传递T类型的东西,而是传递Option [T]类型的东西,包装T类型的所有有效东西,如此

val thing = 1
val thingOption = Some(thing) 

并将所有无效数据存储为Nones,如此

val thingOption = None

然后,如果你想根据thingOption的值做出决定,你可以这样做

thingOption match {
    case None    => // Whatever you want to do with defaults
    case Some(x) => // Whatever you want to do with 'thing' if it isn't a default
}