我是scala的新手,我目前正在工作表中练习。 我注意到@tailrec在工作表中没有工作,即使我添加了导入
import scala.annotation.tailrec
这是我使用
的scala版本Scala code runner version 2.10.2 -- Copyright 2002-2013, LAMP/EPFL
有没有办法让它发挥作用? 感谢
答案 0 :(得分:9)
您描述的问题是Eclipse IDE for Scala中的错误: https://scala-ide-portfolio.assembla.com/spaces/scala-ide/tickets/1001636#/activity/ticket
解决方法是将@tailrec放在def或不同的对象中。
e.g:
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解释器会发出警告
答案 1 :(得分:4)
请注意,您没有误解@tailrec
注释的工作原理 - 它不会强制编译器以尾部递归的方式优化函数" (无论如何,编译器都会进行优化,如果可以的话)。
相反,它只是一个标记,你可以用来告诉编译器"我认为这个函数已经成功地以尾递归方式编写,请告诉我你是否不能以这种方式进行优化。&#34 ;
也就是说,在你想要确保你已经正确编写了一个尾部重复的函数的地方使用它,编译器可以指出你错了。
这对您所看到的内容有意义吗?如果没有看到使用过注释的示例代码,我就无法说出更有用的内容。
答案 2 :(得分:1)
首先定义并存根要注释的函数,然后返回并添加注释。