为什么Scala会在None.map(_.trim)中触发trim函数?

时间:2013-08-30 18:40:23

标签: scala

我有一行代码如下:

Option(str).map(_.trim).getOrElse("")

这个想法很简单:修剪输入字符串或返回空字符串(如果没有)。

但是当str为null时,它在scala控制台中失败:错误:值trim不是Null的成员

原因很明显,因为即使对象是map(),scala也会触发None中的函数。但它不应该直接返回None吗?

1 个答案:

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