选项返回类型上的Scala折叠

时间:2017-12-08 17:46:13

标签: scala fold

我是Scala的新手,我想在进行一些登录后返回Some [String]或None,但似乎返回的类型与折叠不一致。

(Option[String]).fold{
            logger.info("Message append failed")
            None
          }{stuff=>
            logger.info("Message appended")
            Some(stuff)
          }

返回的编译器错误是以下Expression of type Some[String] does not conform to expected type None.type

2 个答案:

答案 0 :(得分:1)

我认为,您使用了错误的类型签名。您必须在某个Option实例上调用fold方法。例如:

scala> val opt = Option("test")
scala> opt.fold[Option[String]] {
     | println("Message append failed.")
     | None
     | } { stuff =>
     | println("Message appended!")
     | Some(stuff)
     | }
Message appended!
res3: Option[String] = Some(test)

答案 1 :(得分:0)

看看fold的定义是有益的:

def fold[B](ifEmpty: => B)(f: A => B): B

所以,当你打电话

Option("hi").fold(None)(x => Some(x))

推断类型B是Option [Nothing],因为编译器无法知道你的意思是什么。在这种情况下,您可以通过使用Option.empty并指定类型来帮助编译器:

Option("hi").fold(Option.empty[String])(x => Some(x))