Scalastyle"公共方法必须具有明确的类型"在Play框架中

时间:2015-02-26 12:14:39

标签: scala playframework playframework-2.0 scalastyle

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

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

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

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

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

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

对此有何良好解决方案的建议?或者我们只需要对Play项目进行检查吗?

3 个答案:

答案 0 :(得分:5)

  

对此有何良好解决方案的建议?或者我们只需要对Play项目进行检查吗?

我建议您为项目完全关闭org.scalastyle.scalariform.PublicMethodsHaveTypeChecker规则,或者在此规则中标记您的控制器被忽略(here您将找到有关如何执行此操作的信息。)< / p>

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

答案 1 :(得分:2)

enter image description here 我希望这有帮助。至设置 - &gt;编辑 - &gt; Scala - &gt;输入注释。将值更改为“添加”而不是“添加”和“添加”。检查'公共价值和方法。然后它IDE将不再显示该警告。

答案 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!")
  }