scala - 在没有注释的情况下应用尾递归时,是否有 Scala 编译器标志来发出警告?

标签 scala sbt scala-compiler

我希望编译器在我没有通过注释告知它对我的函数之一应用尾递归时发出警告。这可能吗?

动机:我很少因为逻辑错误而编写无限循环,但我已经完成了拼写错误(是的,这是可能的)。通常,递归无限循环只是告诉您堆栈溢出异常出了什么问题,但如果它们以递归方式编译尾部,则不会,它只是挂起。

忘记 new 关键字与带有默认参数的案例类相结合是一个很好的例子,我愚蠢地偶然发现了两次:

case class A(a: Int, b: Int = 1)

object A {
  def apply(a: Int): A = A(a)

导致没有 SO 的无限循环,但 def apply(a: Int): A = new A(a) 不会

最佳答案

我认为编译器没有这个功能,但 IntelliJ 在“检查”>“Scala:常规”下提供了“无尾递归注释”

Detects tail recursive methods without @tailrec annotation which verifies that the method will be compiled with tail call optimization.

关于scala - 在没有注释的情况下应用尾递归时,是否有 Scala 编译器标志来发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27697210/

相关文章:

python - scala:具有可变长度参数的函数对象的特征?

scala - 如果 bound 是抽象类型成员,则具有上限的更高种类的类型构造函数不起作用

scala - 为什么将方法包装在另一个方法中会停止 Scala 中的类型不匹配 - 在模式匹配中的类型参数中使用下划线?

scala - 提取 Scala 项目的完整调用图(困难的一个)

scala - 将 Scala Int 列表分组为不同的间隔?

scala - 为什么可以在 REPL 中声明同名变量?

scala - IntelliJ IDEA sbt 导入的 'xxx-build' 模块有什么用?

scala - Scala 中的条件编译

scala - Swagger 将 Option[Int] 建模为 Object,而 Option[String] 被正确建模为字符串

sbt - 如何覆盖 Typesafe 配置设置?