我希望编译器在我没有通过注释告知它对我的函数之一应用尾递归时发出警告。这可能吗?
动机:我很少因为逻辑错误而编写无限循环,但我已经完成了拼写错误(是的,这是可能的)。通常,递归无限循环只是告诉您堆栈溢出异常出了什么问题,但如果它们以递归方式编译尾部,则不会,它只是挂起。
忘记 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/