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