我们已经开始在我的工作中尝试使用Scala和Play框架。设置我们的自动linting和测试框架作为第一件事,并已部署Scalastyle来处理前者。
这是非常有用的,除了我们得到这个特定的lint错误,我们发现很难以一个好的方式解决。一个简单的例子是这样的:
def helloWorld = Action {
req =>
Ok("Hello World!")
}
虽然它常常会复杂得多(当然,很难弄清楚实际上是什么类型)。
在任何一种情况下,这都为Scalastyle提供了“公共方法必须具有显式类型”错误。
不幸的是,在这里设置预期的显式类型似乎通常会导致语法错误。
对此有什么好的解决方案的建议?或者我们是否只需要对Play项目进行此检查?
对此有什么好的解决方案的建议?或者我们是否只需要对Play项目进行此检查?
我建议要么为你的项目完全关闭org.scalastyle.scalariform.PublicMethodsHaveTypeChecker
规则,要么标记你的控制器被这条规则忽略(here你会找到关于如何做到这一点的信息)。
最后,这种检查对编写库的人更有益(因为它有助于更明确地提供api)。我发现,当你在“真正的”项目上工作时,检查这样做只会增加一些样板并阻止你利用类型推断。
我找到了一种更好的方法来删除“公共方法必须具有显式类型”消息,而不关闭它。
在定义这些方法时,可以设置body [type]和[implicit] [type];例如Action [JsValue]和隐式RequestHeader。
代码示例:
def helloWorld:Action[JsValue] = Action {
implicit req: RequestHeader =>
Ok("Hello World!")
}
要么
def helloWorld:Action[AnyContent] = Action {
implicit req: RequestHeader =>
Ok("Hello World!")
}