6

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

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

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

当然,尽管通常它可能要复杂得多(以至于很难弄清楚实际的类型是什么)。

无论哪种情况,这都会给我们来自 Scalastyle 的“公共方法必须具有显式类型”错误。

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

有什么好的解决方案建议吗?还是我们只需要为 Play 项目关闭此检查?

4

3 回答 3

6

有什么好的解决方案建议吗?还是我们只需要为 Play 项目关闭此检查?

我建议要么org.scalastyle.scalariform.PublicMethodsHaveTypeChecker为您的项目完全关闭规则,要么将您的控制器标记为被此规则忽略(在这里您可以找到有关如何执行此操作的信息)。

最后,这项检查对编写库的人更有利(因为它有助于更​​明确地了解提供的 api)。我发现当你在处理“真实”项目时,像这样的检查只会添加一些样板并阻止你利用类型推断。

于 2015-02-26T13:45:04.707 回答
2

在此处输入图像描述 我希望这有帮助。设置 -> 编辑器 -> Scala -> 类型注释。将公共值和方法的值更改为“添加”而不是“添加和检查”。然后它 IDE 将不再显示该警告。

于 2017-06-07T15:10:32.023 回答
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!")
  }
于 2019-04-24T22:39:24.677 回答