scala eclipse工作表中的@tailrec错误:预期的定义开始

时间:2013-09-21 17:24:02

标签: scala

我是scala的新手,我目前正在工作表中练习。 我注意到@tailrec在工作表中没有工作,即使我添加了导入

import scala.annotation.tailrec

这是我使用

的scala版本
Scala code runner version 2.10.2 -- Copyright 2002-2013, LAMP/EPFL

有没有办法让它发挥作用? 感谢

3 个答案:

答案 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)

首先定义并存根要注释的函数,然后返回并添加注释。