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