在Clojure代码中何时何地放置类型注释?

在Clojure代码中何时何地放置类型注释?,clojure,annotations,types,Clojure,Annotations,Types,在Clojure代码中何时何地放置类型注释?显然,当性能起作用时。但是,是否有规则可以让您在何时(仅在执行Java互操作时?)以及在何处添加它们(函数定义参数) 我知道的最重要的原因是性能。clojure中的类型提示会删除反射,这会降低性能。因此,我会在我衡量为性能关键的函数中添加类型提示 java互操作部分中有一个注释。注释包括: Clojure支持使用类型提示来帮助编译器避免代码中性能关键区域的反射。通常,在出现已知的性能瓶颈之前,应该避免使用类型提示 。。。 一旦在标识符或表达式上放置了类

在Clojure代码中何时何地放置类型注释?显然,当性能起作用时。但是,是否有规则可以让您在何时(仅在执行Java互操作时?)以及在何处添加它们(函数定义参数)

我知道的最重要的原因是性能。clojure中的类型提示会删除反射,这会降低性能。因此,我会在我衡量为性能关键的函数中添加类型提示

java互操作部分中有一个注释。注释包括:

Clojure支持使用类型提示来帮助编译器避免代码中性能关键区域的反射。通常,在出现已知的性能瓶颈之前,应该避免使用类型提示

。。。 一旦在标识符或表达式上放置了类型提示,编译器将尝试在编译时解析对该标识符或表达式的方法的任何调用。此外,编译器将跟踪任何返回值的使用并推断其使用的类型等,因此只需很少的提示即可获得完全编译时解析的一系列调用静态成员(或其返回值!)不需要e提示,因为编译器始终具有静态类型

您始终可以打开warning on reflection标志,查看调用反射的位置,以及类型提示可能有帮助的位置

编辑:

关于您的问题“仅适用于java互操作?”--没有。类型提示即使在纯clojure应用程序中也很有用。反射降低性能是JVM上的一个现实问题,也是动态语言通常必须处理的问题

关于可以放置类型提示的位置,请访问clojure.org:

它们可以放在函数参数、let绑定名称、变量名称(定义时)和表达式上:


我知道你已经接受了答案,但这并不是对你问题的直接回答,但刘刚刚发表了一篇非常好的文章,对于出于性能原因而进行的打字暗示,这篇文章很有教育意义。

404-这篇文章现在似乎已经不存在了:(为了解救!在这种情况下,静态成员是什么?