加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala中需要@tailrec注释?

发布时间:2020-12-16 18:01:18 所属栏目:安全 来源:网络整理
导读:参见英文答案 What is the Scala annotation to ensure a tail recursive function is optimized?????????????????????????????????????3个 我理解递归函数的问题和堆栈溢出问题的风险. 但是,如果函数能够针对尾递归进行优化,那么为什么不会自动应用此优化,
参见英文答案 > What is the Scala annotation to ensure a tail recursive function is optimized?????????????????????????????????????3个
我理解递归函数的问题和堆栈溢出问题的风险.

但是,如果函数能够针对尾递归进行优化,那么为什么不会自动应用此优化,即.为什么我需要标记一个可以用@tailrec优化的函数?

解决方法

if a function is able to be optimized for tail recursion then why isn’t this optimization automatically applied

它是.

不幸的是,我没有从SLS中找到一个可以保证这一点的报价.

why do I need to mark a function that can be optimized with @tailrec?

注意:Scala不保证函数的正确尾递归,仅适用于方法!

您没有注释可以优化的方法.您注释必须优化的方法,以便在无法优化时出现编译错误.

见the documentation for scala.annotation.tailrec

A method annotation which verifies that the method will be compiled with tail call optimization.

If it is present,the compiler will issue an error if the method cannot be optimized into a loop.

文档在确切优化的内容中具有误导性(“尾部调用优化”,当Scala真正优化直接尾递归时),但是注释的目的很清楚.

这种注释的原因在于,有时人们对什么是直接尾递归的直觉可能是错误的.这里有很多关于“为什么Scala不优化我的尾递归方法”的形式的问题,其答案是“因为它不是尾递归的”. (Here is an example of a method where the fact that it can’t be optimized is non-obvious.)因此,通过注释方法,您向编译器和您的开发人员发出信号,表明必须优化此方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读