Option クラスのドキュメントでは、次の 2 つの例は同等であると書かれています。
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"
では type のインスタンスを返しますOption[String]
が、2 番目のコード ブロック ステートメントname <- request getParameter "name"
では type のインスタンスを返しますString
(次のステートメントがvariable (に対して定義されていないため) のtrim
メソッドを呼び出すためと仮定しました)。name
trim
Option[String]