IT干货网

scala之Scala 中的选项 monad

xiaohuochai 2025年12月25日 编程设计 40 0

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可能有类型 Stringname.trim会编译。

您可以通过指定 None 的类型来解决此问题。 :
  name <- None: Option[String] 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!