Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@scala eclipse工作表中的tailrec错误:应为定义的开始_Scala - Fatal编程技术网

@scala eclipse工作表中的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注释的工作方式-它不会强制编译器以“尾部递归方式”优化

我是scala的新手,目前正在工作表中练习。 我注意到@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)
  }                                          
}