Option monad 是如何工作的?我正在浏览 scala api还有一个例子(我的意思是第二个),
Because of how for comprehension works, if None is returned from request.getParameter, the entire expression results in None
但是当我尝试这段代码时:
val upper = for {
name <- None //request.getParameter("name")
trimmed <- Some(name.trim)
upper <- Some(trimmed.toUpperCase) if trimmed.length != 0
} yield upper
println(upper.getOrElse(""))
我收到编译错误。这应该如何工作?
请您参考如下方法:
因此,您会收到编译器错误
name <- None
这样,
None的类型设置为
None.type和变量
name推断为
Nothing 类型. (也就是说,如果它确实存在,它就会有这种类型,但显然 for comprehension 甚至不会在运行时创建它。)因此没有方法
name.trim存在,它不会编译。
如果您有
request.getParameter("name")可用,其类型为
Option[String] ,
name可能有类型
String和
name.trim会编译。
您可以通过指定
None 的类型来解决此问题。 :
name <- None: Option[String]




