0

我有这样一行代码:

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

这个想法很简单:修剪输入字符串,如果没有,则返回一个空白字符串。

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

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

4

1 回答 1

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
于 2013-08-30T18:46:20.807 回答