Play框架中的Scalastyle“公共方法必须具有显式类型”

问题描述 投票:5回答:3

我们已经开始在我的工作中尝试使用Scala和Play框架。设置我们的自动linting和测试框架作为第一件事,并已部署Scalastyle来处理前者。

这是非常有用的,除了我们得到这个特定的lint错误,我们发现很难以一个好的方式解决。一个简单的例子是这样的:

  def helloWorld = Action {
    req =>
      Ok("Hello World!")
  }

虽然它常常会复杂得多(当然,很难弄清楚实际上是什么类型)。

在任何一种情况下,这都为Scalastyle提供了“公共方法必须具有显式类型”错误。

不幸的是,在这里设置预期的显式类型似乎通常会导致语法错误。

对此有什么好的解决方案的建议?或者我们是否只需要对Play项目进行此检查?

scala playframework playframework-2.0 scalastyle
3个回答
5
投票

对此有什么好的解决方案的建议?或者我们是否只需要对Play项目进行此检查?

我建议要么为你的项目完全关闭org.scalastyle.scalariform.PublicMethodsHaveTypeChecker规则,要么标记你的控制器被这条规则忽略(here你会找到关于如何做到这一点的信息)。

最后,这种检查对编写库的人更有益(因为它有助于更​​明确地提供api)。我发现,当你在“真正的”项目上工作时,检查这样做只会增加一些样板并阻止你利用类型推断。


2
投票

enter image description here我希望这会有所帮助。要设置 - >编辑器 - > Scala - >类型注释。对于公共值和方法,将值更改为“添加”而不是“添加和检查”。然后它IDE将不再显示该警告。


0
投票

我找到了一种更好的方法来删除“公共方法必须具有显式类型”消息,而不关闭它。

在定义这些方法时,可以设置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!")
  }
© www.soinside.com 2019 - 2024. All rights reserved.