我查看this question试图更好地理解scala中的@tailrec
注释。
我不确定注释是否也暗示编译器进行一些优化,或者仅在标记不是尾递归的方法时用于警告?
更具体地说 - 这个注释是否会以任何方式影响性能?例如,如果我没有放这个注释,编译器会编译一个尾递归函数作为非尾递归?
答案 0 :(得分:3)
根据scaladoc:
一种方法注释,用于验证是否将编译该方法 尾调用优化。
如果存在,编译器将在方法时发出错误 无法优化成循环。
如果您认为自己编写了可优化的函数,那么这是一个触发错误的验证。即使你没有把它放在一边,编译器也会尽可能地优化代码。