scala:扩展函数缺少参数类型:必须完全知道匿名函数的参数类型

时间:2017-07-07 17:08:32

标签: scala playframework future

我是scala的新手,我根本不知道我的代码有什么问题:

我有一些Future可能会抛出异常:

var clean: Future[Boolean];

然而,当我尝试映射

clean.map( b => {
  case true => Ok("success")
  case false => Ok("failed")
}).recover {
  case t => Ok("error: " + t)
}

我得到了标题中指定的编译错误..我完全不知道我的代码在哪里和/哪部分确切地导致它...我已经googled但是很难找到任何线索,因为scala语法非常灵活因此互联网上有如此多的变化,但我得到的错误是误导......

任何帮助都将非常感谢...

2 个答案:

答案 0 :(得分:4)

您传递给.map的函数应该接受一个布尔参数b,并返回另一个函数(花括号中的东西)。编译器无法猜测该内部函数的类型,因此它抱怨参数类型未知。

这实际上是一件好事,因为它根本不是你真正想写的东西。

只需删除整个(b => ...)商家:

clean.map { 
  case true => Ok("success")
  case false => Ok("failed") 
}.recover { 
  case t => Ok("error: " + t)
}

另外,请clean val而不是var。可变变量不是一个好主意。 99%的时间,在scala中编写代码,你不应该需要它们,所以,我建议你暂时假装var关键字根本不存在,直到你学会了足够的语言。能够识别实际需要可变状态的1%的情况。

答案 1 :(得分:2)

我猜你有意:

clean.map( b => b match {
 case true => Ok("success")
 case false => Ok("failed")
}).recover {
 case t => Ok("error: " + t)
}