我有这样一行代码:
Option(str).map(_.trim).getOrElse("")
这个想法很简单:修剪输入字符串,如果没有,则返回一个空白字符串。
但是当 str 是时,它在 scala 控制台中失败null
:错误:值修剪不是 Null 的成员
原因很明显,因为map()
即使对象是scala 也会触发函数None
。但它不应该None
直接返回吗?
我有这样一行代码:
Option(str).map(_.trim).getOrElse("")
这个想法很简单:修剪输入字符串,如果没有,则返回一个空白字符串。
但是当 str 是时,它在 scala 控制台中失败null
:错误:值修剪不是 Null 的成员
原因很明显,因为map()
即使对象是scala 也会触发函数None
。但它不应该None
直接返回吗?
在 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