我是 Scala 的新手,目前正在工作表中练习。我注意到即使我添加了导入,@tailrec在工作表中也不起作用
import scala.annotation.tailrec
这是我正在使用的scala版本
Scala code runner version 2.10.2 -- Copyright 2002-2013, LAMP/EPFL
有没有办法让它工作?谢谢
您描述的问题是 Eclipse IDE for Scala 中的一个错误:https://scala-ide-portfolio.assembla.com/spaces/scala-ide/tickets/1001636#/activity/ticket
解决方法是将@tailrec放在 def 或其他对象中。
例如:
package tailrecfunc
import scala.annotation.tailrec
object Session17 {
val block = {
@tailrec
def tailrecfunc(n: Int): Int =
if(n == 0) n; else tailrecfunc(n - 1)
tailrecfunc(4)
}
}
这样,scala 解释器将在函数不是尾递归时警告您
注意不要弄错@tailrec
注解的工作方式 - 它不会强制编译器以"尾递归方式"优化函数(如果可以的话,编译器无论如何都会进行优化)。
只是一个标记,您可以使用它来告诉编译器"我认为这个函数已经以尾递归的方式成功编写,如果您无法以这种方式优化它,请告诉我。
也就是说,在你想要确保你正确地编写了一个旨在进行尾部回避的函数的地方使用它,编译器可以在你弄错时指出它。
这是否意味着您所看到的内容?如果没有看到您使用注释的示例代码,我不能说任何更有用的东西。
首先定义并存根要注释的函数,然后返回并添加注释。