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