我有一行代码如下:
Option(str).map(_.trim).getOrElse("")
这个想法很简单:修剪输入字符串或返回空字符串(如果没有)。
但是当str为null
时,它在scala控制台中失败:错误:值trim不是Null的成员
原因很明显,因为即使对象是map()
,scala也会触发None
中的函数。但它不应该直接返回None
吗?
答案 0 :(得分:3)
在2.9.1上,它对我有用:
scala> val x : Option[String] = Option(null)
x: Option[String] = None
scala> x.map{_.length}
res4: Option[Int] = None
不起作用,因为类型为Option[Null]
而不是Option[String]
:
scala> Option(null).map(_.trim)
<console>:8: error: value trim is not a member of Null
Option(null).map(_.trim)
如果你给它正确的类型,是否有效:
scala> Option[String](null).map(_.trim)
res3: Option[java.lang.String] = None