Bef*_*rem 9 null scala nullreferenceexception
Regex.MatchData.group(i:Int):java.lang.String返回null而不是Option [String]有什么特别的原因吗?
是否有"Scala方式"来处理Scala中的空值?
它返回null,因为它是Java库上的浅层接口.我觉得它也很糟糕,我被它咬了.
如果您获得的值可能为null,则可以Option(value)在Scala 2.8上编写,它将成为None或者Some(value).这不适用于模式匹配,但您可以为此编写自己的提取器:
object Optional {
  def unapply[T](a: T) = if (null == a) Some(None) else Some(Some(a))
}
例子:
scala> val a:String = null
a: String = null
scala> a match {
     | case Optional(None) => println("Got none")
     | case Optional(Some(value)) => println("Got "+value)
     | }
Got none
scala> val a = "string"
a: java.lang.String = string
scala> a match {
     | case Optional(None) => println("Got none")
     | case Optional(Some(value)) => println("Got "+value)
     | }
Got string
scala> val a = "5"
a: java.lang.String = 5
scala> a match {
     | case Optional(None) => println("Got none")
     | case Optional(Some(value)) => println("Got "+value.toInt)
     | }
Got 5
| 归档时间: | 
 | 
| 查看次数: | 1054 次 | 
| 最近记录: |