在Scala中是否需要@tailrec批注?

XOXO

我了解递归函数的问题以及堆栈溢出问题的风险。

但是,如果一个函数能够针对尾递归进行优化,那么为什么不自动应用这种优化。为什么需要标记一个可以优化的功能@tailrec

约格午间

如果一个函数能够针对尾递归进行优化,那为什么不自动应用这种优化

不幸的是,我没有找到SLS的报价来保证这一点。

为什么需要标记一个可以优化的功能@tailrec

注:Scala并不能保证适当的尾递归函数,只对方法

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

请参阅有关文档scala.annotation.tailrec

方法注解,用于验证将通过尾部调用优化来编译该方法。

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

该文件是在误导究竟什么是优化的(“尾调用优化”的时候,确实只斯卡拉优化直接尾递归),但它明确注释的目的。

使用此注释的原因是,有时人们对什么是直接尾递归以及什么不是直接直觉都可能是错误的。在SO上有很多问题,形式为“为什么Scala无法优化我的尾递归方法”,其答案是“因为它不是尾递归”。这是一个方法的示例,其中无法优化它的事实是不明显的。)因此,通过对方法进行注释,可以向编译器和其他开发人员发出信号,说明必须对该方法进行优化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我需要在Scala中使用@tailrec吗?

来自分类Dev

Scala Eclipse工作表中的@tailrec错误:预期的定义开始

来自分类Dev

Scala Eclipse工作表中的@tailrec错误:预期的定义开始

来自分类Dev

Scala @tailrec折叠

来自分类Dev

Scala和@Inject批注

来自分类Dev

是否可以在TypeScript批注中组合多种类型的成员?

来自分类Dev

在接口上已指定时,是否需要在实现上使用批注

来自分类Dev

是否需要序列化对象以使用@RequestBody @ResponseBody批注

来自分类Dev

Java批注以确定被批注的方法是否执行

来自分类Dev

在Scala中是否需要后续函数调用的显式变量声明?

来自分类Dev

在SQL中是否需要分号?

来自分类Dev

模板中是否需要引用?

来自分类Dev

在SurfaceView中是否需要onDraw()?

来自分类Dev

是否需要Tor中的SSL?

来自分类Dev

在<$!>中是否需要Monad约束

来自分类Dev

在SQL中是否需要分号?

来自分类Dev

在SurfaceView中是否需要onDraw()?

来自分类Dev

模板中是否需要引用?

来自分类Dev

是否需要Nest IF?在Python中

来自分类Dev

WebAPI 中是否需要 ValidateAntiForgeryToken

来自分类Dev

IntelliJ / Kotlin PSI中的批注与批注条目

来自分类Dev

JavaPoet:如何在批注中构建批注

来自分类Dev

如果本地字段名称与传入数据的字段名称相同,是否需要SerializedName批注?

来自分类Dev

MATLAB中的LaTeX批注

来自分类Dev

MATLAB中的LaTeX批注

来自分类Dev

在Spring Security中@Secured批注中是否使用'or'条件允许多个角色

来自分类Dev

在Spring 3 Web中-是否可以将元数据作为文档嵌入到RequestMapping批注中?

来自分类Dev

让IntelliJ在Java项目中尊重Scala依赖项中的多个@throws批注

来自分类Dev

使用标有Java 8中引入的@Exported批注的类型是否安全?

Related 相关文章

  1. 1

    我需要在Scala中使用@tailrec吗?

  2. 2

    Scala Eclipse工作表中的@tailrec错误:预期的定义开始

  3. 3

    Scala Eclipse工作表中的@tailrec错误:预期的定义开始

  4. 4

    Scala @tailrec折叠

  5. 5

    Scala和@Inject批注

  6. 6

    是否可以在TypeScript批注中组合多种类型的成员?

  7. 7

    在接口上已指定时,是否需要在实现上使用批注

  8. 8

    是否需要序列化对象以使用@RequestBody @ResponseBody批注

  9. 9

    Java批注以确定被批注的方法是否执行

  10. 10

    在Scala中是否需要后续函数调用的显式变量声明?

  11. 11

    在SQL中是否需要分号?

  12. 12

    模板中是否需要引用?

  13. 13

    在SurfaceView中是否需要onDraw()?

  14. 14

    是否需要Tor中的SSL?

  15. 15

    在<$!>中是否需要Monad约束

  16. 16

    在SQL中是否需要分号?

  17. 17

    在SurfaceView中是否需要onDraw()?

  18. 18

    模板中是否需要引用?

  19. 19

    是否需要Nest IF?在Python中

  20. 20

    WebAPI 中是否需要 ValidateAntiForgeryToken

  21. 21

    IntelliJ / Kotlin PSI中的批注与批注条目

  22. 22

    JavaPoet:如何在批注中构建批注

  23. 23

    如果本地字段名称与传入数据的字段名称相同,是否需要SerializedName批注?

  24. 24

    MATLAB中的LaTeX批注

  25. 25

    MATLAB中的LaTeX批注

  26. 26

    在Spring Security中@Secured批注中是否使用'or'条件允许多个角色

  27. 27

    在Spring 3 Web中-是否可以将元数据作为文档嵌入到RequestMapping批注中?

  28. 28

    让IntelliJ在Java项目中尊重Scala依赖项中的多个@throws批注

  29. 29

    使用标有Java 8中引入的@Exported批注的类型是否安全?

热门标签

归档