@tailrec会影响编译器优化吗?

时间:2014-05-08 15:36:39

标签: scala recursion compiler-optimization tail-recursion

我查看this question试图更好地理解scala中的@tailrec注释。

我不确定注释是否也暗示编译器进行一些优化,或者仅在标记不是尾递归的方法时用于警告?

更具体地说 - 这个注释是否会以任何方式影响性能?例如,如果我没有放这个注释,编译器会编译一个尾递归函数作为非尾递归?

1 个答案:

答案 0 :(得分:3)

根据scaladoc:

  

一种方法注释,用于验证是否将编译该方法   尾调用优化。

     

如果存在,编译器将在方法时发出错误   无法优化成循环。

如果您认为自己编写了可优化的函数,那么这是一个触发错误的验证。即使你没有把它放在一边,编译器也会尽可能地优化代码。