在编写的 Option 类文档中,以下两个示例是等效的:
val name: Option[String] = request getParameter "name"
val upper = name map { _.trim } filter { _.length != 0 } map { _.toUpperCase }
println(upper getOrElse "")
和
val upper = for {
name <- request getParameter "name"
trimmed <- Some(name.trim)
upper <- Some(trimmed.toUpperCase) if trimmed.length != 0
} yield upper
println(upper getOrElse "")
但我不明白它们如何等效:在第一个代码块request getParameter "name"
返回类型实例Option[String]
,但在第二个代码块语句name <- request getParameter "name"
返回类型实例String
(我假设因为下一个语句调用变量trim
上的方法(未定义))。name
trim
Option[String]