我是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
答案 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)
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))