我是 scala 的新手,我目前正在工作表中练习。我注意到@tailrec 在工作表中不起作用,即使我添加了导入
import scala.annotation.tailrec
这是我正在使用的 scala 版本
Scala code runner version 2.10.2 -- Copyright 2002-2013, LAMP/EPFL
有没有办法让它工作?谢谢
我是 scala 的新手,我目前正在工作表中练习。我注意到@tailrec 在工作表中不起作用,即使我添加了导入
import scala.annotation.tailrec
这是我正在使用的 scala 版本
Scala code runner version 2.10.2 -- Copyright 2002-2013, LAMP/EPFL
有没有办法让它工作?谢谢
您描述的问题是 Scala 的 Eclipse IDE 中的一个错误: 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
注释的工作方式 - 它不会强制编译器以“尾递归方式”优化函数(如果可以的话,编译器无论如何都会进行优化)。
相反,它只是一个标记,您可以用来告诉编译器“我认为这个函数已经以尾递归方式成功编写,请告诉我您是否不能以这种方式优化它。”
也就是说,在你想确保你已经正确编写了一个旨在尾递归的函数的地方使用它,并且编译器可以在你出错时指出。
这对你所看到的有意义吗?如果没有看到您使用注释的示例代码,我不能说任何更有用的东西。
首先定义并存根你要注解的函数,然后返回并添加注解。